UserDefaults 在同一个应用程序组中具有不同的值
Posted
技术标签:
【中文标题】UserDefaults 在同一个应用程序组中具有不同的值【英文标题】:UserDefaults have different values within same app group 【发布时间】:2018-10-22 22:55:55 【问题描述】:我有 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 并且没有里面的值。
我在主应用和扩展应用上使用相同的 AppGroup,并且我访问这样的数据
let personNames = UserDefaults.extensions.personNames
我使用免费的 Apple ID 帐户有问题吗?我有可能用这个帐户创建组,所以我怀疑。
【问题讨论】:
不要使用setValue
方法你应该使用set(yourObject, forKey: "yourKey")
【参考方案1】:
编辑: 是的,您可能需要一个付费的 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()
【讨论】:
感谢您的评论,但很遗憾没有帮助。 您好,但是我启用了应用程序组,您可以看到它应该足够了developer.apple.com/support/app-capabilities 能否在“功能”下添加“应用组”部分的屏幕截图?【参考方案2】:好的,我找到了解决方案。我使用 goup.com.company.appName.sharedStorage 格式创建了新组,并且我将其用作 suitName 并且一切正常。
所以可能是因为免费的苹果帐户在创建应用组时出现问题(因为它是自动的)或者可能是因为 group.appName 格式无效。
【讨论】:
以上是关于UserDefaults 在同一个应用程序组中具有不同的值的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中使用 UserDefaults 进行全局更新