UserDefaults在同一个应用程序组中具有不同的值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (91)

我有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并且没有内部值。

我在Main和Extension应用程序上使用相同的AppGroup,我访问这样的数据

   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()
    }
}}

扫码关注云+社区

领取腾讯云代金券