У меня проблема с UserDefaults
. Я использую UserDefaults(suiteName: UserDefaults.Keys.groupKey)
, потому что у меня также есть Share Extension
. Это моя настройка:
добавочный номер UserDefaults:
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
работает отлично. Ошибки нет.
Вызов get:
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». Я застрял и понятия не имею, что я делаю здесь не так, поэтому я рад любой помощи!
ОБНОВЛЕНИЕ:
Я заметил странную поведение, которое я не могу объяснить: когда в Calling set я вызываю только defaults.setDataSourceArray(data: dataArray as? [Wishlist])
без настройки isLoggedIn
и dropOptions
, он работает нормально ?! Кто-нибудь может мне это объяснить?