偏好设置

iOS应用支持偏好设置,要来保存数据,比如保存用户名、密码、字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置。

每个应用都有一个NSUserDefaults实例,通过它来存取偏好设置。

+(NSUserDefaults*)standardUserDefaults//单例对象

存储偏好设置使用set开头的方法,如:

NSUserDefaults*defaults=[NSUserDefaultsstandardUserDefaults];[defaultssetObject:@"aaa"forKey:@"account"];[defaultssetObject:@"123"forKey:@"password"];[defaultssetInteger:10forKey:@"age"];[defaultssetBool:YESforKey:@"autoLogin"];//存储后立刻同步[defaultssynchronize];

读取偏好设置也有对应的方法,如:

NSUserDefaults*defaults=[NSUserDefaultsstandardUserDefaults];NSString*account=[defaultsobjectForKey:@"account"];BOOLautoLogin=[defaultsboolForKey:@"autoLogin"];


应用案例:新特性页面的显示

很多App下载或更新后第一次打开会显示一个新特性页面(往往是多张图片展示新特性),再次打开不会再显示。

实现方式:

将每一次App运行时的版本号存储在偏好设置中

App启动时,检测存储在偏好设置中的版本号与当前的版本号是否一致

如:

//AppDelegate的didFinishLaunching...方法中//通过UserDefault获得上一次app运行时的版本NSString*lastVersion=[[NSUserDefaultsstandardUserDefaults]objectForKey:UserDefaultBundleVerson];//获取当前BundleVersionNSURL*infoPlistURL=[[NSBundlemainBundle]URLForResource:@"Info.plist"withExtension:nil];NSDictionary*dict=[NSDictionarydictionaryWithContentsOfURL:infoPlistURL];NSString*currentVersion=dict[(NSString*)kCFBundleVersionKey];//如果这个版本时第一次进入,则显示新特性页面if(![currentVersionisEqualToString:lastVersion]){UIViewController*vc=[[UIStoryboardstoryboardWithName:@"MainPage"bundle:nil]instantiateViewControllerWithIdentifier:@"newFeature"];self.window.rootViewController=vc;}else{UIViewController*vc=[[UIStoryboardstoryboardWithName:@"MainPage"bundle:nil]instantiateViewControllerWithIdentifier:@"mainPage"];self.window.rootViewController=vc;}

//新特性跳转到App主页时//获取当前BundleVersionNSURL*infoPlistURL=[[NSBundlemainBundle]URLForResource:@"Info.plist"withExtension:nil];NSDictionary*dict=[NSDictionarydictionaryWithContentsOfURL:infoPlistURL];NSString*currentVersion=dict[(NSString*)kCFBundleVersionKey];//将当前版本保存到UserDefault中[[NSUserDefaultsstandardUserDefaults]setObject:currentVersionforKey:UserDefaultBundleVerson];