我正在尝试为我的应用程序创建一些设置。其中一个是排序设置,可以是0,1,2。目前我有一个枚举处理这个:
typedef NS_OPTIONS(NSInteger, SearchSort) {
SearchSortDefaultBestMatched = 0,
SearchSortDistance = 1,
SearchSortHighestRated = 2
};
从选择器中选择值时,我会更新[NSUserDefaults standardDefaults] setInteger:
但是,当用户首次运行应用程序时,没有默认设置。我发现如果检查[[NSUserDefaults standardUserDefaults] integerForKey:...];
这会返回0.这是不正确的。这是存储此值的正确过程/检查默认值是否有值?理想情况下,我希望nil而不是0,因为0可能是一个选项。
除非建议的解决方案当然是将值存储为1,2,3并来回转换。
答案 0 :(得分:3)
为此目的,NSUserDefaults有一个方法registerDefaults
。你给它一个字典"默认默认"键/值对。当您要求未设置的给定密钥时,这些值将成为您获得的初始值。
我总是在我的app委托的+initialize
类方法中添加我的初始默认值。在系统分配/进入app委托之前调用该方法,因此在调用任何应用程序的自定义代码(除了main中的代码之外)之前调用它。
正如@AdamEberbach在答案中建议的那样,您也可以使用objectForKey:
代替integerForKey
。如果没有存储值,则返回nil;如果存储了值,则返回NSNumber
(谁的值可能为零)。
答案 1 :(得分:1)
为什么不使用objectForKey:
代替,如果你得到一个有效的对象,那么你可以转为NSNumber
并获得integerValue:
- 否则你得到nil
。