微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与群组共享的UserDefaults无法使用,除非重新启动或终止应用程序

如何解决与群组共享的UserDefaults无法使用,除非重新启动或终止应用程序

我有一个托管应用程序和一个应用程序扩展程序,它们通过UserDefaults共享数据。它正在工作,但结果不一致。 有时,我在托管应用程序中更改了数据,而扩展程序看不到更改。如果我终止了应用和扩展程序或重新启动设备,则该扩展程序可以看到更改。

我使用单例在两个应用之间共享代码(即使它们是不同的实例,因为在两个不同的过程中也是如此):

HttpContext

有时,通常是在全新安装后,托管应用会调用class UDChecker { static let shared = UDChecker() /// App Group UserDefaults (identifier must be the same in both hosting app and extension) let userDefaults = UserDefaults(suiteName: "group.myDomain.myApp.foo") private init() {} /// Called by hosting app func setDayNumber(number: Int) { guard let ud = userDefaults else { return } print("setting new number \(number)") ud.set(number,forKey: UDChecker.kDayNumber) ud.synchronize() } /// Called by extension func getDayNumber() -> Int { if let ud = userDefaults { return ud.integer(forKey: UDChecker.kDayNumber) } return -1 } } 。 然后该扩展读取值UDChecker.shared.setDayNumber(3),但返回认值0。直到设备重新启动或应用与扩展被杀死,然后扩展读取UDChecker.shared.getDayNumber()。 / p>

这是怎么了?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。