【问题标题】:iOS 8.2 [NSUserDefaults standardUserDefaults] returning niliOS 8.2 [NSUserDefaults standardUserDefaults] 返回 nil
【发布时间】:2015-05-23 04:56:39
【问题描述】:

我在 iOS 8.2 中遇到了一个奇怪的问题,其中 [NSUserDefaults standardUserDefaults] 在 iPhone 上返回 nil。同样的逻辑在所有以前的 iOS 版本中都有效。我有一个通用应用程序,它有两种不同的设置。plist 一个用于 iPad,另一个用于 iPhone 列表如下;

Settings.bundle-
    -Root.plist
    -Root~iphone.plist

安装在设备上时,会显示正确的设置窗格,用户可以为给定字段输入适当的值。虽然在我的应用程序运行时 [NSUserDefaults standardUserDefalts] 返回一个 nil 对象。

我可能做错了什么? Apple 是否更改了 8.2 中的预期内容?

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

无论在系统设置中设置什么首选项,userDefaults 始终为零。

【问题讨论】:

  • 适用于我,在 iOS 8.2 中。你想发布一个代码 sn-p,以显示你在做什么?
  • 嗨,迈克,感谢您的回复。您必须先删除您的应用程序并从应用商店下载新的应用程序。我最初认为与我的应用程序在我的设备 8.2 上运行相同,我的应用程序二进制文件是从 8.1 的先前安装中带来的。但是,一旦我在 8.2 上删除了我的应用程序并从应用商店重新安装,我就能够重现该问题

标签: ios iphone ipad nsuserdefaults ios8.2


【解决方案1】:

您是否将字典设置为"Settings.bundle/Root.plist"

// Register the preference defaults from file "Settings.bundle/Root.plist"
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:
                            [[NSBundle mainBundle] pathForResource:@"Settings.bundle/Root"
                                                            ofType:@"plist"]];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

此后[NSUserDefaults standardUserDefaults] 不再为零。

就我而言,[NSUserDefaults standardUserDefaults] 使用的字典在调试器中如下所示:

    {
        PreferenceSpecifiers =     (
                    {
                DefaultValue = 1;
                Key = sortByDistance;
                Title = "Sortiere nach Entfernung";
                Type = PSToggleSwitchSpecifier;
            }
        );
        StringsTable = Root;
    }

要访问首选项,我编写了一个小方法:

- (id) preferenceValueForKey: (NSString *)key {
    NSArray *preferences = [[NSUserDefaults standardUserDefaults] arrayForKey:@"PreferenceSpecifiers"];
    NSUInteger index = [preferences indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
        return [[obj valueForKey:@"Key"] isEqualToString:key];
    }];
    return [preferences[index] valueForKey:@"DefaultValue"];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多