UserDefaults 在同一应用程序组中具有不同的值
UserDefaults have different values within same app group
我有 App+Extension 并且我做了这样的共享存储
extension UserDefaults {
static let suiteName = "group.myApp"
static let extensions = UserDefaults(suiteName: suiteName)!
private enum Keys {
static let personNames = "personNames"
}
var personNames: [String] {
get {
guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
return []
}
return array
}
set {
UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
}
}}
但是当我调试应用程序时,我看到内存地址 A 和正确的值(因为我通过主应用程序输入值但是当我调试扩展时我有内存地址 B 里面没有值。
我在主应用程序和扩展应用程序上使用相同的应用程序组,并且我这样访问数据
let personNames = UserDefaults.extensions.personNames
我使用免费的 Apple Id 帐户有问题吗?我有可能用这个帐户创建组所以我怀疑。
编辑:
是的,您可能需要一个付费的 Apple 开发者帐户,因为您必须启用与您的应用程序 ID 关联的应用程序组功能。
原回答:
您可能需要调用 synchronize()
将您的数据立即写入磁盘。
var personNames: [String] {
get {
guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
return []
}
return array
}
set {
UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
UserDefaults.extensions.synchronize()
}
}}
好的,我找到了解决方案。我创建了格式为 goup.com.company.appName.sharedStorage 的新组,并将其用作 suitName 并且一切正常。
所以可能是因为免费的苹果帐户,创建应用程序组时出现问题(因为它是自动的)或者可能是因为 group.appName 格式无效。
我有 App+Extension 并且我做了这样的共享存储
extension UserDefaults {
static let suiteName = "group.myApp"
static let extensions = UserDefaults(suiteName: suiteName)!
private enum Keys {
static let personNames = "personNames"
}
var personNames: [String] {
get {
guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
return []
}
return array
}
set {
UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
}
}}
但是当我调试应用程序时,我看到内存地址 A 和正确的值(因为我通过主应用程序输入值但是当我调试扩展时我有内存地址 B 里面没有值。
我在主应用程序和扩展应用程序上使用相同的应用程序组,并且我这样访问数据
let personNames = UserDefaults.extensions.personNames
我使用免费的 Apple Id 帐户有问题吗?我有可能用这个帐户创建组所以我怀疑。
编辑:
是的,您可能需要一个付费的 Apple 开发者帐户,因为您必须启用与您的应用程序 ID 关联的应用程序组功能。
原回答:
您可能需要调用 synchronize()
将您的数据立即写入磁盘。
var personNames: [String] {
get {
guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
return []
}
return array
}
set {
UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
UserDefaults.extensions.synchronize()
}
}}
好的,我找到了解决方案。我创建了格式为 goup.com.company.appName.sharedStorage 的新组,并将其用作 suitName 并且一切正常。
所以可能是因为免费的苹果帐户,创建应用程序组时出现问题(因为它是自动的)或者可能是因为 group.appName 格式无效。