转载

NSUserDefaults 的默认值

NSUserDefaults 提供了一个与默认设置交互的接口. 这些默认设置允许一个 App 为每一个单独的用户的设置提供定制化的行为.

数据的同步

我们可以通过 NSUserDefaults 对象在运行时从数据库读取用户的数据, 并添加到缓存中. 在我们正常获取或者设置 NSUserDefaults 的值时, 数据库和缓存中的数据其实并没有同步更新, 因为这样会影响效率. NSUserDefaults 在需要同步时会 自动调用 synchronize 方法更新数据库数据. 我们也可以手动调用 synchronize 来同步数据.

不可变

从 NSUserDefaults 中返回的值都是不可变的, 也就是 NSString NSArray NSDictionary . 如果你想要改变这些值, 你需要调用 mutableCopy , 获取不可变的版本, 改变它的值之后再设置 NSUserDefaults 中对应的键.

Bool

在 NSUserDefaults 中设置 BOOL 类型的值总会有一个非常麻烦的问题. 如果我们要在 NSUserDefaults 中存储一个 BOOL 类型的值, 当我们使用 boolForKey: 取出它的值时, 它的默认值总是 NO .

因为在你没有为一个 key 单独设置值时, 它的默认值总是 nil . 所以在我们使用 NSUserDefaults 设置一个 BOOL 值时, 总会把这个 BOOL 值的 语义设置为相反 的.

但是当我们需要把 BOOL 值的默认值设置为 YES 时, 其实也是有办法的.

设置 BOOL 值的默认值

假如我们要为我们的 App 添加一个 isLatestVersion 的 BOOL 值, 而它的默认值是 YES .

static NSString *isLatestVersion = @"isLatestVersion";   

当我们使用 boolForKey: 获取 isLatestVersion 的值时:

[[NSUserDefaults standUserDefaults] boolForKey:isLatestVersion]; 

如果我们在之前没有设置它的值, 它的值总是 NO .

但是当我们用 objectForKey: 去获取它的值时:

[[NSUserDefaults standUserDefaults] objectForKey:isLatestVersion]; 

它返回的值是 nil . 哪怕在我们先通过 boolForKey: 获取 isLatestVersion 之后, 再调用 objectForKey: 返回的值依然是 nil . boolForKey: 也没有改变它的行为.

也就是说当我们没有设置一个 BOOL 类型的 NSUserDefaults 值时, 它的默认值都是 nil , 这样我们就可以通过下面的代码将一个 BOOL 类型的默认值设置为 YES 了.

if ([[NSUserDefaults standUserDefaults] objectForKey:isLatestVersion] == nil) {       [[NSUserDefaults standUserDefaults] setBool:YES forKey:isLatestVersion]; } 
正文到此结束
Loading...