iOS: NSUserDefaults 要注意的地方 尤其首次设置默认值的方法
2014-11-19 18:17
453 查看
转自: /article/8004926.html
NSUserDefaults用于存储一些app setting。当你关闭app之后再打开后,之前存储的setting依然可以从NSUserDefaults里读取。注意:密码最好不要存储在NSUserDefaults里,要存储也必须用AES/DES加密存储,更安全的方法是 https://github.com/ldandersen/scifihifi-iphone
把密码存储在NSUserDefault or plist里的后果: http://www.shushao.com/news/info/item/203510-ios
example 1: 读取NSUserDefaults里的"color" setting
[[NSUserDefaults standardUserDefaults] stringForKey:@"color"];
example 2: 写入NSUserDefaults里的"color" setting为"red"
[[NSUserDefaults standardUserDefaults] setObject:@"red" forKey:@"color"];
另外NSUserDefaults还提供了一个registerDefaults方法,通常在appDelegate的didFinishLaunchingWithOptions里调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"blue", @"color",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
return YES;
}
registerDefaults方法调用时会check NSUserDefaults里是否已经存在了相同的key,如果有则不会把其覆盖。举个例子:
1 当第一次run上面的app时,"color"="blue"会写入NSUserDefaults里
2 然后你的app调用了
[[NSUserDefaults standardUserDefaults] setObject:@"red" forKey:@"color"];
这时NSUserDefaults里"color"="red"
3. exit app and restart it,registerDefaults方法还是会被调用,但它check到"color" key已经存在,就不会把它写入NSUserDefaults中
这时NSUserDefaults里"color"="red"
4. 修改registerDefaults方法变成
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"black", @"color",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
然后重新run app,之后NSUserDefaults里依然"color"="red"
5. 修改registerDefaults方法变成
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"black", @"color",@"tomson", @"username",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
然后重新run app,之后NSUserDefaults里依然"color"="red",不过多了a pair of key-value: username=tomson
注意:
* If you terminate your app by pressing "Stop" in Xcode (in the Simulator or on the device), your User Defaults might get
saved
* 我没试过NSUserDefaults在exit app之后被保存,有人说碰到,并给出代码调用""的解决方案
ref links:
http://stackoverflow.com/questions/6033385/nsuserdefaults-not-being-saved-in-simulator
http://stackoverflow.com/questions/2622754/why-is-nsuserdefaults-not-saving-my-values
NSUserDefaults用于存储一些app setting。当你关闭app之后再打开后,之前存储的setting依然可以从NSUserDefaults里读取。注意:密码最好不要存储在NSUserDefaults里,要存储也必须用AES/DES加密存储,更安全的方法是 https://github.com/ldandersen/scifihifi-iphone
把密码存储在NSUserDefault or plist里的后果: http://www.shushao.com/news/info/item/203510-ios
example 1: 读取NSUserDefaults里的"color" setting
[[NSUserDefaults standardUserDefaults] stringForKey:@"color"];
example 2: 写入NSUserDefaults里的"color" setting为"red"
[[NSUserDefaults standardUserDefaults] setObject:@"red" forKey:@"color"];
另外NSUserDefaults还提供了一个registerDefaults方法,通常在appDelegate的didFinishLaunchingWithOptions里调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"blue", @"color",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
return YES;
}
registerDefaults方法调用时会check NSUserDefaults里是否已经存在了相同的key,如果有则不会把其覆盖。举个例子:
1 当第一次run上面的app时,"color"="blue"会写入NSUserDefaults里
2 然后你的app调用了
[[NSUserDefaults standardUserDefaults] setObject:@"red" forKey:@"color"];
这时NSUserDefaults里"color"="red"
3. exit app and restart it,registerDefaults方法还是会被调用,但它check到"color" key已经存在,就不会把它写入NSUserDefaults中
这时NSUserDefaults里"color"="red"
4. 修改registerDefaults方法变成
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"black", @"color",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
然后重新run app,之后NSUserDefaults里依然"color"="red"
5. 修改registerDefaults方法变成
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"black", @"color",@"tomson", @"username",nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
然后重新run app,之后NSUserDefaults里依然"color"="red",不过多了a pair of key-value: username=tomson
注意:
* If you terminate your app by pressing "Stop" in Xcode (in the Simulator or on the device), your User Defaults might get
saved
* 我没试过NSUserDefaults在exit app之后被保存,有人说碰到,并给出代码调用""的解决方案
ref links:
http://stackoverflow.com/questions/6033385/nsuserdefaults-not-being-saved-in-simulator
http://stackoverflow.com/questions/2622754/why-is-nsuserdefaults-not-saving-my-values
相关文章推荐
- [转]iOS: NSUserDefaults 要注意的地方 尤其首次设置默认值的方法
- iOS: NSUserDefaults 要注意的地方 尤其首次设置默认值的方法
- iOS: NSUserDefaults 要注意的地方 尤其首次设置默认值的方法
- iOS_两种方法删除NSUserDefaults所有记录
- ios本地存储-偏好设置(NSUserDefaults)
- NSUserDefaults—ios应用数据存储方式(偏好设置)
- iOS两种方法删除NSUserDefaults所有记录
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- [iOS开发]NSUserDefaults使用注意
- ios NSUserDefaults的常用方法。userdefaults
- IOS学习之——用NSUserDefaults保存和读取程序设置
- iOS设置自定义UA [NSUserDefaults standardUserDefaults] registerDefaults:@{ @"UserAgent":
- 开发人员如何使用testFlight给测试人员推送ios测试包(含使用testFlight要注意的地方)(20170413备注:苹果已改版,此方法不再适用)
- IOS使用NSUserDefaults保存用户登录数据时注意事项
- 高级UIKit-04(NSUserDefaults、NSKeyedArchiver、对象归档方法) - 回读(IOS)
- IOS开发中数据持久化的几种方法--NSUserDefaults
- iOS开发UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序
- ios NSUserDefaults存储数据(偏好设置)
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- IOS 数据存储——用户默认设置 NSUserDefaults