我完全不知道出什么问题了:
extension UserDefaults {
static let shared = UserDefaults(suiteName: SharedGroupName)!
static func set(object: Any, forKey key: String) {
shared.set(object, forKey: key)
shared.synchronize()
}
}
答案 0 :(得分:3)
You should try omitting the static variable and just use:
UserDefaults(suiteName: SharedGroupName)!.set(object, forKey: key)
It might make a difference. Also, as said in one of the comments, "synchronize" is not needed.
答案 1 :(得分:2)
我已经重新创建了完全相同的源代码,并且没有崩溃,我认为崩溃是由于您提供的示例文件之外的某些原因引起的。您可以添加更多可能将数据传递给扩展程序的代码吗?
答案 2 :(得分:1)
只需声明共享为可选。
static var shared: UserDefaults? = UserDefaults(suiteName: SharedGroupName)
答案 3 :(得分:0)
extension UserDefaults {
static let shared = UserDefaults(suiteName: SharedGroupName! as String)
static func set(object: Any, forKey key: String) {
shared?.set(object, forKey: key)
// shared?.synchronize() obsolete
}
}
答案 4 :(得分:0)
如果答案是肯定的,并且原因是您正在使用窗口小部件扩展,请确保主应用程序目标和窗口小部件扩展目标都启用了应用程序组功能,并使用并激活了该功能(必须选中复选标记)应用组名称。
如果答案是否定的,则将init替换为suiteName并使用默认的初始化程序。
static let shared = UserDefaults(suiteName: SharedGroupName! as String)
能否请您尝试直接传递SharedGroupName的字符串值?