Сохранить словарь в userdefaults в swift 3 с помощью xcode 8

Я использую следующий код для сохранения объекта в UserDefaults (ранее NSUserDefaults) с помощью xcode 8:

let defaults = UserDefaults.standard()
defaults.set(someObject, forKey: "someObject")
print(defaults.object(forKey: "someObject"))

someObject - это словарь, и я работаю на симуляторе.

По какой-то причине это не сохраняет значение, и печатается «ноль». Интересно, проблема в симуляторе?


person alionthego    schedule 15.06.2016    source источник


Ответы (5)


Для Свифт 3

UserDefaults.standard.setValue(token, forKey: "user_auth_token")
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)")
person Jan    schedule 12.08.2016

Отлично работает здесь с этим ..!

    let dict:[String:String] = ["key":"Hello"]
    UserDefaults.standard.set(dict, forKey: "dict")
    let result = UserDefaults.standard.value(forKey: "dict")
    print(result!)
    // Output -> { key:hello;}
person Bishnu Kumar Gurung    schedule 15.06.2016

Это недокументированная, но известная проблема, заключающаяся в том, что NSUserDefaults/UserDefualts не работает в симуляторе iOS 10, если ранее был запущен симулятор iOS 8/9.

Перезагрузка вашего Mac и переход прямо к XCode 8, симулятор iOS 10 решит эту проблему.

См. также: Почему мой приложение работает в бета-версии XCode 8 (8S128d)

person Richard    schedule 15.06.2016

Эта проблема, по-видимому, вызвана наличием двух установленных версий xcode/simulator.

Что сработало для меня, так это удаление xcode 7 и просто сохранение бета-версии xcode 8 в моей системе. Очистка корзины, сброс симулятора и запуск. Я также перезагрузил свой компьютер.

После выполнения этих шагов симулятор может сохранить в UserDefaults.

person alionthego    schedule 15.06.2016

Свифт 4:-

let defaults = UserDefaults.standard

let dictionary: [String:String] = ["key":"Value"]  //Dictionary which you want to save

defaults.setValue(dictionary, forKey: "DictValue") //Saved the Dictionary in user default

let dictValue = defaults.value(forKey: "DictValue") //Retrieving the value from user default 

print(dictValue)  // Printing the value 
person Sandeep Vishwakarma    schedule 30.07.2018
comment
сохраняя Int:String Dictionary, вы получите сбой приложения. Работает только строка: строка - person Vito Valov; 16.01.2019
comment
@VitoValov, почему произойдет сбой, если ключ словаря не является строкой? - person Pavel Bogart; 11.01.2021