簡體   English   中英

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和正確的值(因為我通過Main app放置了值,但是當我調試擴展程序時,我的內存地址為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()
    }
}}

好的,我找到了解決方案。 我以goup.com.company.appName.sharedStorage格式創建了一個新組,並且將它用作suitName,並且一切正常。

因此,可能是由於有免費的Apple帳戶導致創建應用組時出現了問題(因為它是自動的),或者可能是因為group.appName格式無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM