获取 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
}
我解决了这个问题..愚蠢的初学者问题。当 setDropOptions
在 UserDefaults
中时,我使用了 dataSourceArray
中的 key
。修复了它并且它现在可以工作了。感谢所有试图提供帮助的人:)
我对 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
}
我解决了这个问题..愚蠢的初学者问题。当 setDropOptions
在 UserDefaults
中时,我使用了 dataSourceArray
中的 key
。修复了它并且它现在可以工作了。感谢所有试图提供帮助的人:)