2

我希望用户能够做出一些偏好,如颜色、首选图像等。当我为此使用 NSUserDefaults 时,在应用程序的第一次启动时不会有偏好,对吧?所以,每次我想得到一个偏好

NSInteger avatarID = (NSInteger)[[NSUserDefaults standardUserDefaults] objectForKey:@"avatar"];

我必须检查它是否为空,然后使用我的系统偏好。但后来我在文档中看到了这一点:+resetStandardUserDefaults

是否有两个默认分支保存在某处?来自用户的,来自开发者的?

4

1 回答 1

6

是的,但这与您正在做的事情有点不同。NSUserDefaults 有一个registerDefaults方法,它允许您使用您提供的值填充 NSDictionary 中的“空白”默认值。把它放在你的应用控制器的 +initialize 方法中,你就会知道默认值是合理的。如果用户默认对象找到一个键的“真实”值,无论是您在当前应用程序启动期间设置的值还是从磁盘加载的值,它将始终优先于您在registerDefaults. resetStandardUserDefaults将从内存中删除共享用户默认对象并撤消您对其所做的任何自定义,这不是您需要提供默认值的东西。

另外,请记住,您不能只是将对象转换为原始的 NSInteger 值,因为您最终会得到一个表示对象指针的内存位置的数字。要么使用 NSUserDefaultintegerForKey:直接获取原始值,要么使用objectForKey:获取 NSNumber 并使用integerValue获取原始值。

于 2009-05-22T15:07:27.973 回答