【问题标题】:NSUserDefaults standardUserDefaults not working with extensionNSUserDefaults standardUserDefaults 不适用于扩展
【发布时间】:2014-07-07 22:00:20
【问题描述】:

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

在我的应用委托中,我从 didFinishLaunchingWithOptions 调用它

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

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

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

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

编辑 也尝试过同样的崩溃结果:

应用代理

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 的组。

我在这里错过了什么?

【问题讨论】:

  • 你打电话给NSUserDefaults.standardUserDefaults().synchronize()了吗?
  • 是的。但我很确定 synchronize() 无论如何都是一个可选调用
  • synchronize()通常是可选的...
  • 这真的可能不应该被标记为 Objective-C 问题的副本。

标签: ios swift nsuserdefaults ios8


【解决方案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. 键盘更改:

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

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

【讨论】:

  • 谢谢,伙计。我看到很多人分享代码,却错过了在 info.plist 中添加 RequestsOpenAccess 的重要步骤。
【解决方案2】:

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

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

【讨论】:

  • 你救了我的命的好答案。:)
【解决方案3】:

刚刚踩到这个。在键盘扩展中,您需要“完全访问权限”才能向应用程序组文件写入内容。因此,如果没有“完全访问权限”,您需要使用 NSUserDefaults.standardUserDefaults

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

我正在为这两个应用组节省价值:NSUserDefaultsNSUserDefaults.standardUserDefaults。阅读时 - 同时检查两者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多