Словарь не получает сохранения в Userdefault в Swift 5 - PullRequest
0 голосов
/ 12 октября 2019

У меня есть следующий тестовый код

 if let responseJSON = try JSONSerialization.jsonObject(with: data!) as? NSDictionary{
 print(responseJSON)

 UserDefaults.standard.setValue(responseJSON, forKey: "user_auth_token")
//UserDefaults.standard.set(responseJSON, forKey: "user_auth_token")
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)")

}

, но в «UserDefaults.standard.setValue» эта строка выдает ошибку, что

for key user_auth_token'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000113ab06fb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x0000000112ad3ac5 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000113ab0555 +[NSException raise:format:] + 197
    3   CoreFoundation                      0x00000001139cb82b _CFPrefsValidateValueForKey + 283
    4   CoreFoundation                      0x00000001139cbc95 -[CFPrefsSource setValues:forKeys:count:copyValues:removeValuesForKeys:count:from:] + 373
    5   CoreFoundation                      0x00000001139cbfbc -[CFPrefsSource setValues:forKeys:count:copyValues:from:] + 28
    6   CoreFoundation                      0x00000001139cc013 -[CFPrefsSource setValue:forKey:from:] + 67
    7   CoreFoundation                      0x0000000113aa759e __108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke + 318
    8   CoreFoundation                      0x0000000113aa6e0a normalizeQuintuplet + 314
    9   CoreFoundation                      0x0000000113aa7454 -[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:] + 100
    10  CoreFoundation                      0x0000000113a843fb -[_CFXPreferences setValue:forKey:appIdentifier:container:configurationURL:] + 91
    11  CoreFoundation                      0x0000000113a88065 _CFPreferencesSetAppValueWithContainer + 117
    12  Foundation                          0x00000001125bd563 -[NSUserDefaults(NSUserDefaults) setObject:forKey:] + 55
)

, что это значит? Могу ли я сохранить свои данные в пользовательский по умолчанию. пожалуйста, помогите.

1 Ответ

1 голос
/ 12 октября 2019

Вам нужно хранить и извлекать JSON из userDefaults, как это, просто нужно архивировать данные при сохранении пользовательских объектов. Более того, если вы хотите сохранить объекты пользовательских классов в пользовательских настройках по умолчанию, вам необходимо реализовать протокол NSCoding / Codeable в этом классе.

    class func saveInUserDefauld(json: [String: Any]) {
    let myData = NSKeyedArchiver.archivedData(withRootObject: json)
    UserDefaults.standard.set(myData, forKey: "UserSession")
}

class func getUser()-> [String: Any]? {
    if let user = UserDefaults.standard.object(forKey: "UserSession")as? Data {
        let recovedUserJson = NSKeyedUnarchiver.unarchiveObject(with: user) as! [String: Any]
        return recovedUserJson
    }
    else {
        return nil
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...