iOS程序实现程序的版本新特性显示功能

 

每个程序都会多个版本,每个版本的功能会进一步优化或调整,将这些功能简明扼要的展示给急于尝鲜的用户,这就是版本新特性的功能。

程序第一次安装或升级之后的第一次启动,都会出现三到四页功能介绍页面,划屏浏览,然后才是正式进入程序。同版本的程序二次启动则没有这些介绍页。这就是版

本新特性现实界面。

 

 

 

如何实现这个功能呢?

需求:第一次安装或版本升级,显示新特性;同版本第二次进入,不显示新特性。

分析:程序启动会显示不同界面,就是window加载的根控制器rootViewController是不相同的。如何让一个程序启动的时候,有选择性的加载不同控制器呢?简单,if语句判断一下就解决了。那么if的判断条件是什么呢?这里牵扯的是版本,自然是版本号了。

比较版本号,决定显示哪个控制器。

比较哪里的版本号呢?比较当前运行程序的版本号和程序沙盒中存储的版本号。这里分以下三种情况:

第一次运行该程序,程序沙盒根本没有保存版本号。当前程序版本号 > 沙盒中版本号:显示新特性。

程序升级了,当前程序版本号 > 沙盒中版本号:显示新特性。(或者不等于)

非首次运行该程序,沙盒中已保存版本号。当前程序版本号 = 沙盒中版本号:不显示新特性。

 

 1 //    创建window,大小等于屏幕大小
 2     self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
 3     //    获取当前程序的info.plist中的Bundle version版本号,和沙盒中的版本号比较。
 4     //    info.plist中版本号的键值
 5     NSString *key = (__bridge NSString *)kCFBundleVersionKey;
 6     //    当前软件版本号
 7     NSString *newEditionNum = [NSBundle mainBundle].infoDictionary[key];
 8     //    沙盒中的版本号
 9     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
10     NSString *sandBoxEditionNum = [defaults stringForKey:key];
11     //    比较两者的大小(或者判断[newEditionNum isEqualToString:sandBoxEditionNum])
12     if ([newEditionNum compare:sandBoxEditionNum] == NSOrderedDescending) {
13         //        当前版本号存储到沙盒
14         [defaults setObject:newEditionNum forKey:key];
15         //        同步写入
16         [defaults synchronize];
17         //根控制器为新特性控制器
18         self.window.rootViewController = [[TYEditionViewController alloc]init];
19     }else{
20         //根控制器为tabBarController
21         self.window.rootViewController = [[TYTabBarController alloc]init];
22     }
23     //    显示window
24     [self.window makeKeyAndVisible];

 

posted @ 2016-07-12 08:22  战神在路上  阅读(248)  评论(0编辑  收藏  举报