我已经看到所有其他关于在主机应用和应用扩展程序之间共享NSUserDefaults数据的帖子,但我的仍然无效。以下是我所做的一切:
毕竟,这段代码仍无效:
// in the host app
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
[testDefaults setObject:@"TEST" forKey:@"foo"];
[testDefaults synchronize];
然后:
// in the extension
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
NSLog(@"%@", [testDefaults objectForKey:@"foo"]);
导致:
(null)
当我查看Xcode首选项时,我注意到这些图标,其中没有一个具有“App Group”图标:
但正如我之前所说,我在设置应用程序组后清除了我的钥匙串,证书和配置文件。因此,如果这实际上是问题,我如何将权利添加到配置文件?
我错过了什么?我是新鲜的想法。
帮助?
编辑:访问群组正在我的今日& Safari扩展,不在WatchKit扩展中。我不知道为什么,并且所有构建设置似乎都以相同的方式配置。
编辑2 :对于那些坚持我的功能设置不正确的人,这里有截图:
答案 0 :(得分:5)
我遇到了类似的问题。我注意到,我的WatchKit扩展和WatchKit应用程序具有相同的包标识符。我更改了WatchKit App的bundle id。此外,我没有忘记在Extension的info.plist中更改NSExtensionAttributes / WKAppBundleIdentifier以匹配该ID。现在一切正常。我希望这会对你有帮助!
很快: WatchKit App和Extension的捆绑标识符应该不同!
答案 1 :(得分:2)
您是否尝试从iPhone应用程序中读取相同的密钥?
我认为问题在于您未在WatchKit扩展程序中激活应用程序组权利。
在项目设置下选择您的WatchKit扩展程序。
选择WatchKit Extension下的功能选项卡,然后查找应用程序组并将其打开。
选择您之前创建的相同应用组标识符(它应自动显示并进行检查)。