ios_NSUserDefaults基本使用

NSUserDefaults适合存储轻量级的本地数据存储,比如保存登陆界面的用户名、密码之类的数据,并使之本地持久化。
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。

[NSUserDefaults standardUserDefaults]是系统提供的单例方法。
一般通过[[NSUserDefaults standardUserDefaults] setObject:forKey:]来存储数据。
通过[[NSUserDefaults standardUserDefaults] objectForKey:]来获取已存数据。

每次存储数据后用[[NSUserDefaults standardUserDefaults] synchronize]方法持久化数据,直接同步到文件里。 NSUserDefaults存储方式跟字典类似,事实上,NSUserDefaults就是一个Plist文件,它的数据都存储在应用程序内置的一个Plist文件里。

例:

NSDictionary *userInfoDic = [NSDictionary dictionary];
[userInfoDic setObject:@"admin" forKey:@"UserName"];
[userInfoDic setObject:@"123456" forKey:@"Password"];
[[NSUserDefaults standardUserDefaults] setObject:userInfoDic forKey:@"UserInformation"];
//持久化数据,直接同步到文件里
[[NSUserDefaults standardUserDefaults] synchronize];

但是NSUserDefaults不能存储自定义的类对象,若把一个对象存储到NSUserDefaults会报错。聪明的人会把对象放进数组,再把数组存入NSUserDefaults,不过这样做也是错误的,因为数组中包含了自定义对象。 若要在NSUserDefaults中存入自定义对象,则对象需要遵循NSCoding协议,并实现encodeWithCoder方法和initWithCoder方法。

还有要注意的一点是:类型为NSNull的空数据也是无法存入NSUserDefaults的。若数据中有NSNull类型空数据,把它置 nil@"" 即可存入NSUserDefaults,否则程序会崩溃。

如果要存储的NSDictionary里面有NSNull对象,可以使用遍历方法将NSNull对象转为@""对象再次存储,下面是一个简单的处理方法:

对基类NSDictionary添加Category,即下面的公有方法,使用NSDictionary的对象即可调用该方法:
- (NSDictionary *)safeDictionaryWithDic:(NSDictionary *)dic
{
    NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] initWithDictionary:dic];
    [mutableDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        if (obj == [NSNull null] || obj == nil) {
            [mutableDic removeObjectForKey:key];
            [mutableDic setObject:@"" forKey:key];
        }
    }];
    return [[NSDictionary alloc] initWithDictionary:mutableDic];
}

总结:NSUserDefaults是一个轻量级的数据库,使用起来还是很方便的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值