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的组。
我在这里错过了什么?
-
组
RequestsOpenAccess = YES;
-
设置:
NSUserDefaults * usrInfo = [[NSUserDefaults alloc] initWithSuiteName:@"myKeyboard"]; [usrInfo setObject:theme.icon forKey:@"themeName"]; // This is the new data; [usrInfo synchronize];
-
keyboardChange:
NSUserDefaults * usrInfo = [[NSUserDefaults alloc] initWithSuiteName:@"myKeyboard"]; [usrInfo synchronize]; NSString * str = [usrInfo objectForKey:@"themeName"];
然后你可以改变键盘,例如改变它的背景
从iOS设置菜单中删除您的键盘,并添加“允许完全访问权限”。 它应该工作。
如果仍然无法使用,请在应用程序组的“function”部分检查目标configuration中是否包含应用程序和键盘扩展,以确保所有内容都是固定的。
刚刚踩了这个。 在键盘扩展中,您需要“完全访问”才能访问应用程序组文件。 所以没有“完全访问”你需要使用NSUserDefaults.standardUserDefaults
问题是,当你从应用程序组更改NSUserDefaults – 它正在工作,直到你重新启动应用程序,因为它也将值存储在内存中。 很难debugging。
我将这两个值保存到:应用程序组NSUserDefaults
和NSUserDefaults.standardUserDefaults
。 阅读时也检查两者。