【问题标题】:Shared UserDefaults between app and extension not working correctly应用程序和扩展程序之间的共享 UserDefaults 无法正常工作
【发布时间】:2016-10-16 16:36:02
【问题描述】:

所以我一直在环顾四周并按照所有步骤正确设置共享 UserDefaults,但我应该遗漏一些东西。

我的应用和扩展程序都激活了应用组功能。两者都使用相同的套件名称("group.TestSharedPreferences"),我是这样写的:

struct Preferences {
    static let shared = UserDefaults(suiteName: "group.TestSharedPreferences")!
}

viewDidLoad:

Preferences.shared.set(1, forKey: "INT")

阅读:

Preferences.shared.integer(forKey: "INT") // Returns 1 in Container App
Preferences.shared.integer(forKey: "INT") // Returns 0 in Today Extension

即使在设置"INT"之后使用synchronize(),扩展中检索到的值也不是容器App中保存的值。关于我可能缺少什么的任何想法?谢谢!

【问题讨论】:

  • 两个目标的权利文件是否包含该应用组?
  • 如果此键的值为nil,我希望返回0。因此,这似乎表明您没有在今天的扩展代码中正确定义Preferences.shared,或者今天的扩展代码被调用之前应用程序有机会设置值。跨度>
  • @LeoNatan 是的,两者都包含正确的应用组
  • @iDeC 或许可以尝试致电synchronize()

标签: ios swift nsuserdefaults


【解决方案1】:

我会建议在这里逐步挖掘。

首先,确保主应用和小部件扩展都启用了应用组功能,并使用相同且已激活(必须设置复选标记)的应用组名称:

主应用:

今日小部件扩展:

然后使用直接设置/获取访问进行简单测试。在您的主应用程序的 AppDelegate.didFinishLaunchingWithOptions 方法中(根据您的需要更改应用程序组名称和键):

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") {
    userDefaults.set("test 1" as AnyObject, forKey: "key1")
    userDefaults.set("test 2" as AnyObject, forKey: "key2")
    userDefaults.synchronize()
}

在 Today Widget Extension 的 ViewController 中:

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") {
    let value1 = userDefaults.string(forKey: "key1")
    let value2 = userDefaults.string(forKey: "key2")
    ...
}

如果可行,则问题必须与您的 Preferences 单例相关。

【讨论】:

  • 好吧,这似乎有效,但我开始收到此警告:无法读取 CFPrefsPlistSource<....> 中的值。所以我最终更改了我的 group.XXXX 默认名称,并且由于某种原因现在可以正常工作。还是谢谢你!
  • 我遇到了同样的问题,就像@iDeC 通过创建一个新的 sharedContainer 解决了一样。然后一切正常。
  • @zisoft 感谢 App Group 的清晰描述,它帮助我在我的应用程序和服务扩展之间进行通信。
  • 它为我的应用程序和扩展程序启用了它。并检查两项权利 - 一项是自动添加的,另一项不是。
  • 对我来说也是同样的问题。在展开可选值时意外发现 nil 致命错误:当作为对象访问时,它返回 nil。 stackoverflow.com/questions/55820193/…
猜你喜欢
  • 2018-07-12
  • 2021-05-25
  • 1970-01-01
  • 2019-03-29
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多