如何解决与群组共享的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 举报,一经查实,本站将立刻删除。