首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UserDefaults在同一应用组中具有不同的值

UserDefaults在同一应用组中具有不同的值
EN

Stack Overflow用户
提问于 2018-10-23 06:55:55
回答 2查看 202关注 0票数 1

我有App+Extension和我这样的共享存储

代码语言:javascript
复制
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,并且我像这样访问数据

代码语言:javascript
复制
   let personNames = UserDefaults.extensions.personNames

我使用免费的Apple Id帐户有问题吗?我有可能用这个帐户创建群组,所以我很怀疑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-23 15:16:41

好了,我找到解决方案了。我用goup.com.company.appName.sharedStorage格式创建了一个新的组,我也用它作为suitName,一切都正常。

因此,可能是因为免费的苹果账户,创建应用程序组时出现了问题(因为它是自动的),或者可能是因为group.appName格式无效。

票数 1
EN

Stack Overflow用户

发布于 2018-10-23 07:05:01

编辑:

是的,您可能需要一个付费的Apple开发者帐户,因为您必须启用与您的应用程序id关联的App Group功能。

原始答案:

您可能需要调用synchronize()将数据立即写入磁盘。

代码语言:javascript
复制
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()
    }
}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52938782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档