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 格式无效。