NSUserDefaults standardUserDefaults不支持扩展

时间:2014-07-07 22:00:21

标签: ios swift nsuserdefaults ios8

我在开发者门户网站中将应用程序组添加到了我的应用程序ID,并在我的配置文件中使用了该应用程序ID。 Xcode中的我的产品标识符设置为该应用程序ID。

在我的app委托中,我从didFinishLaunchingWithOptions

中调用它
NSUserDefaults.standardUserDefaults().setObject("hey", forKey: "TEST")
NSUserDefaults.standardUserDefaults().synchronize()

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

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

这绝不是真的。如果我删除验证测试并打印结果,则自定义键盘会崩溃。

EDIT 也尝试了同样的崩溃结果:

App Delegate

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)

在两个目标的“功能”部分中,我启用了已选择此组ID的组。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:1)

  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"];
    
  4. 然后您可以更改键盘,例如,更改其背景

答案 1 :(得分:1)

从iOS设置菜单中移除键盘,然后使用“允许完全访问权限”再次添加键盘。它应该工作。

如果它仍然不起作用,请在应用程序组的“功能”部分中检查目标配置中是否包含应用程序和键盘扩展,以确保所有内容都已修复。

答案 2 :(得分:0)

踩到这个。在键盘扩展中,您需要"完全访问"有权写入应用程序组文件的内容。所以没有"完全访问"你需要使用NSUserDefaults.standardUserDefaults

问题在于,当您从应用程序组更改NSUserDefaults时,它会一直有效,直到您重新启动应用程序,因为它也会将值存储在内存中。很难调试。

我将价值保存到:app group NSUserDefaultsNSUserDefaults.standardUserDefaults。阅读时 - 检查两者。