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

最佳答案

NSUserDefaults为此有一个方法registerDefaults。您给它提供了一个“默认默认”键/值对的字典。这些将成为您要求尚未设置的给定密钥时获得的初始值。

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

编辑:

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

关于ios - 使用NSUserDefaults的整数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23771534/

10-14 23:42