iOS 10 Today扩展无法再读取共享用户默认值

时间:2016-12-23 09:04:45

标签: ios objective-c xcode

我有一个实现今天扩展的应用程序。直到iOS10它工作正常,但现在我发现它无法读取存储在共享NSuserDefaults中的密钥。

我的主机应用代码:

NSUserDefaults *sharedPrefs = [[NSUserDefaults alloc] initWithSuiteName:kSharedGroupIdentifier];
[sharedPrefs setObject:username forKey:@"username"];
[sharedPrefs setObject:@"Test" forKey:@"test"];
[sharedPrefs synchronize];

我的扩展程序代码:

NSUserDefaults *sharedPrefs  = [[NSUserDefaults alloc] initWithSuiteName:kSharedGroupIdentifier];
NSString *str = [sharedPrefs valueForKey:@"test"];

str var在扩展中总是为零。我已经为主机应用程序和扩展程序应用程序设置了我的应用程序组功能,我已经根据Apple开发人员门户网站上的设置进行了检查。一切都好。任何人都可以请求帮助,我必须做些不同的事情吗?

修改 我注意到的另一件事是我有一个红色感叹号:“将添加组权利添加到您的权利文件”,当我解决问题时,感叹号消失,但当我关闭并重新打开项目时,它是又来了。我重新创建了临时配置文件,但仍然存在同样的问题

2 个答案:

答案 0 :(得分:4)

听起来问题是你的Entitlements文件缺少相关的行。

要诊断问题所在,请从构建设置开始:

  • Code Signing Entitlements下,应该列出一个文件
  • 打开该文件并确保其中包含App Groups键,其值与您的kSharedGroupIdentifier
  • 相符
  • 确保文件未标记为只读(这可能会导致"修复"无法正常工作)
  • 验证以下所有内容是否匹配:
    • 两个应用程序中的kSharedGroupIdentifier
    • kSharedGroupIdentifier以及App Groups
    • 的权利文件中的值

接下来,我们可以将问题缩小到特定密钥或整个首选项域,如下所示:

NSUserDefaults *sharedPrefs  = [[NSUserDefaults alloc] initWithSuiteName:kSharedGroupIdentifier];
if (sharedPrefs == nil) {
  NSLog(@"Error loading shared user defaults!");
}

nil值表示套件名称无效。

答案 1 :(得分:0)

重新启动我解决了这个问题。

Apple RNotes WWDC种子:运行多个iOS模拟器可能导致NSUserDefaults无法运行运行iOS 8或9模拟器,然后运行iOS 10模拟器将导致NSUserDefaults停止在模拟器中工作。这可以通过重新启动主机Mac来解决。

我希望它能帮到你,

感谢。