使用NSUserDefaults的Integer值

时间:2014-05-20 23:19:46

标签: ios objective-c ios7 enums nsuserdefaults

我正在尝试为我的应用程序创建一些设置。其中一个是排序设置,可以是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并来回转换。

2 个答案:

答案 0 :(得分:3)

为此目的,NSUserDefaults有一个方法registerDefaults。你给它一个字典"默认默认"键/值对。当您要求未设置的给定密钥时,这些值将成为您获得的初始值。

我总是在我的app委托的+initialize类方法中添加我的初始默认值。在系统分配/进入app委托之前调用该方法,因此在调用任何应用程序的自定义代码(除了main中的代码之外)之前调用它。

编辑:

正如@AdamEberbach在答案中建议的那样,您也可以使用objectForKey:代替integerForKey。如果没有存储值,则返回nil;如果存储了值,则返回NSNumber(谁的值可能为零)。

答案 1 :(得分:1)

为什么不使用objectForKey:代替,如果你得到一个有效的对象,那么你可以转为NSNumber并获得integerValue: - 否则你得到nil