NSUserDefaults standardUserDefaults不能与扩展一起使用

我在开发人员门户中将应用程序组添加到了我的应用程序ID,并在我的供应configuration文件中使用该应用程序ID。 Xcode中的我的产品标识符被设置为该应用程序ID。

在我的应用程序委托我从didFinishLaunchingWithOptions调用这个

NSUserDefaults.standardUserDefaults().setObject("hey", forKey: "TEST") NSUserDefaults.standardUserDefaults().synchronize() 

在我的键盘应用程序扩展中,我称之为:

 if let test = NSUserDefaults.standardUserDefaults().objectForKey("TEST") as? String { println(test) } 

这从来都不是真的。 如果我删除validationtesting,只是打印结果自定义键盘崩溃。

编辑也试过这个相同的崩溃结果:

应用程序委托

 var userDefaults = NSUserDefaults(suiteName: "group.jackedgames.myappgroup") userDefaults.setObject("TEST", forKey: "TEST") userDefaults.synchronize() 

键盘扩展

 var userDefaults = NSUserDefaults(suiteName: "group.jackedgames.myappgroup") var test = userDefaults.objectForKey("TEST") as String NSLog(test) 

在两个目标的“function”部分,我已经select了这个组ID的组。

我在这里错过了什么?

  1.  RequestsOpenAccess = YES; 
  2. 设置:

     NSUserDefaults * usrInfo = [[NSUserDefaults alloc] initWithSuiteName:@"myKeyboard"]; [usrInfo setObject:theme.icon forKey:@"themeName"]; // This is the new data; [usrInfo synchronize]; 
  3. keyboardChange:

     NSUserDefaults * usrInfo = [[NSUserDefaults alloc] initWithSuiteName:@"myKeyboard"]; [usrInfo synchronize]; NSString * str = [usrInfo objectForKey:@"themeName"]; 

然后你可以改变键盘,例如改变它的背景

从iOS设置菜单中删除您的键盘,并添加“允许完全访问权限”。 它应该工作。

如果仍然无法使用,请在应用程序组的“function”部分检查目标configuration中是否包含应用程序和键盘扩展,以确保所有内容都是固定的。

刚刚踩了这个。 在键盘扩展中,您需要“完全访问”才能访问应用程序组文件。 所以没有“完全访问”你需要使用NSUserDefaults.standardUserDefaults

问题是,当你从应用程序组更改NSUserDefaults – 它正在工作,直到你重新启动应用程序,因为它也将值存储在内存中。 很难debugging。

我将这两个值保存到:应用程序组NSUserDefaultsNSUserDefaults.standardUserDefaults 。 阅读时也检查两者。