繁体   English   中英

应用和扩展程序之间共享的UserDefaults无法正常工作

[英]Shared UserDefaults between app and extension not working correctly

因此,我一直在环顾四周,并按照所有步骤正确设置了共享的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中的值。 关于我可能会缺少的任何想法? 谢谢!

我建议在这里逐步进行挖掘。

首先,请确保主应用程序和窗口小部件扩展都启用了应用程序组功能,并使用相同的应用程序组功能并将其激活(必须设置选中标记)应用程序组名称:

主要应用程式: 主应用

今日小工具扩展:

今日小工具扩展

然后使用直接设置/获取访问权限进行简单测试。 在主应用程序的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()
}

在您今天的窗口小部件扩展的ViewController中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM