您的位置:首页 > 其它

关于NSuserdefault存储数据以及存储可变数据时的一些问题

2015-08-22 11:28 501 查看
 小弟正在学 iOS,有一段时间了,用了几次nsuserdefault,发现一些问题记在这里共有需要的朋友参考和自勉

在项目中我们经常会遇到一些数据:这些数据是应用访问频率非常高,并且数据量不大用,来存储用户基本信息和一些应用设置的数据。比如说,在项目中作登录时可能会有自动登录,那么自动登录的账户名与密码从哪来呢,实际上我们就可以在用户选择自动登录时将用户名与密码保存到nsuserdefault中

使用的方法如下:

第一步:用户选择自动登录把信息存入default

NSUserDefaults *login = [NSUserDefaults standardUserDefaults];
[loginsetObject:nilforKey:@"account"];

[login
setObject:nilforKey:@"password"];(上面我把账户名和密码写成了nil)。

当然仅仅这样是不够的,这样也只是能够从应用中自动获取用户名和密码。

我们还得设置一个属性来记录用户设置是否自动登录:

[login setObject:@“1” forKey:@"autologin"];

第二步:登录时判断是否自动登录及

当程序启动时首先获得是否自动登录信息如果为@“1”那么再获取用户名与密码信息最后就直接登录了

 NSUserDefaults*login
= [NSUserDefaultsstandardUserDefaults];//这里default的名字随便起只要你感觉顺眼
NSString *autologin =[loginobjectForKey:@"autologin"];
NSString *account = [loginobjectForKey:@"account"];
NSString *password = [loginobjectForKey:@"password"];

第三步:就是直接访问服务器登录了扯的太远了这里不在说。

这个对于小数据用起来很是方便然而问题出现了:

当我想用userdefualt存分组通讯录信息(以字典形式)时发现,无论你向userdefault存入的数据是可变的还是不可变的,取出来之后都会变成不可变的,无论你是声明成可变的还是怎么整她就是不可变的,那么你想直接修改数据就变得不可行了。那么我要添加一个联系人该怎么办呢,自己思考了一下想到这个方法:

 NSUserDefaults *book = [NSUserDefaultsstandardUserDefaults];

 NSDictionary *dic1 = [book objectForKey:@"NameString"];//先取出先前存入的字典数据

 NSMutableDictionary *dic2 = [NSMutableDictionarydictionaryWithDictionary:dic1];//
利用已有字典数据创建一个新的可变字典
 [dic2setObject:dic2forKey:@"NameString"];//对可变字典进行(添加/移除等)操作
 [dressBooksetObject:dic2forKey:@"dressBook"];//最后将dic2存入default替换原先数据
这样就成功了。

然而,在运用时还是会出现问题,就是自己定义的类型(假设 class Person)无法直接存入到default,无论你用数组还是字典包装了person default无法识别person,必须将person转化为nsstring 、nsdictionary、nsarray、nsdata这些数据类型。这一部分我研究的还不是很懂,推荐一个地址http://my.oschina.net/u/1245365/blog/294449#OSC_h2_3

仅仅这些希望会对大家有些帮助~~

(第一次写博客,有什么写的不对的还请包涵由指正) 
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息