获取 UserDefaults 不返回任何内容

Getting UserDefaults is not returning anything

我对 UserDefaults 有疑问。我使用 UserDefaults(suiteName: UserDefaults.Keys.groupKey) 因为我还有一个 Share Extension。这是我的设置:

分机用户默认值:

func setDataSourceArray(data: [Wishlist]?){
    set(try? PropertyListEncoder().encode(data), forKey: Keys.dataSourceKey)
    synchronize()
}

func getDataSourceArray() -> [Wishlist]? {
    if let data = self.value(forKey: Keys.dataSourceKey) as? Data {
        if let dataSourceArray =
            try? PropertyListDecoder().decode(Array < Wishlist > .self, from: data) as[Wishlist] {
                return dataSourceArray
            }
    }
    return nil
}

调用集:

 // save dataSourceArray in UserDefaults
if let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey) {
    defaults.setIsLoggedIn(value: true)
    defaults.setDataSourceArray(data: dataArray as? [Wishlist])
    defaults.setDropOptions(dropOptions: self.dropOptions)
    defaults.synchronize()
} else {
    print("error Main")
}

Setting 工作得很好。没有错误。

调用获取:

if let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey) {
        print(defaults.isLoggedIn())
        if defaults.isLoggedIn(){
            if let data = defaults.getDataSourceArray(){
                
                defaults.synchronize()
                print(data[0].name)

            } else {
                print("Error getting dataSourceArray")
            }
        } else {
            print("yeet")
        }
        
    } else {
        print("error 1")
}

这总是打印:“获取 dataSourceArray 时出错”。 我被困住了,不知道我在这里做错了什么,所以我很高兴得到每一个帮助!

更新:

我注意到一个我无法解释的奇怪行为:在 调用 set 时,我只调用 defaults.setDataSourceArray(data: dataArray as? [Wishlist]) 而没有设置 isLoggedIn 和 [=19= 】 没问题?!谁能给我解释一下?

你的设置为零

 defaults.setDataSourceArray(data: dataArray as? [Wishlist]) 

因为 dataArray as? [Wishlist] 将无法 nil

func getDataSourceArray() -> [Wishlist]? {
    if let data = self.value(forKey: Keys.dataSourceKey) as? Data {  
            do {  
                  let dataSourceArray =  try PropertyListDecoder().decode(Array < Wishlist > .self, from: data) as[Wishlist] 
                  return dataSourceArray
            }
            catch { 
               print(error) 
            }
    } 
    return nil
}
    
    

我解决了这个问题..愚蠢的初学者问题。当 setDropOptionsUserDefaults 中时,我使用了 dataSourceArray 中的 key。修复了它并且它现在可以工作了。感谢所有试图提供帮助的人:)