每个程序都会多个版本,每个版本的功能会进一步优化或调整,将这些功能简明扼要的展示给急于尝鲜的用户,这就是版本新特性的功能。
程序第一次安装或升级之后的第一次启动,都会出现三到四页功能介绍页面,划屏浏览,然后才是正式进入程序。同版本的程序二次启动则没有这些介绍页。这就是版
本新特性现实界面。
如何实现这个功能呢?
需求:第一次安装或版本升级,显示新特性;同版本第二次进入,不显示新特性。
分析:程序启动会显示不同界面,就是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];
时间: 2024-10-15 21:10:02