web-dev-qa-db-ja.com

xcode 8でSwift 3のuserdefaultsに辞書を保存します

次のコードを使用して、xcode 8を使用してオブジェクトをUserDefaults(以前はNSUserDefaults)に保存しました。

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

someObjectは辞書であり、シミュレータで実行しています。

何らかの理由で、これは値を保存せず、「nil」が出力されます。シミュレーターの問題かどうか疑問に思います。

54
alionthego

この問題は、xcode/simulatorの2つのバージョンがインストールされているために発生したようです。

私のために働いたのは、xcode 7をアンインストールして、システムにxcode 8ベータ版を保持するだけでした。ゴミ箱を空にし、シミュレータをリセットして実行します。また、コンピューターを再起動しました。

これらの手順を実行した後、シミュレータはUserDefaultsに保存できます。

10
alionthego

Swift 3の場合

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

これで完璧に動作します..!

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

これは文書化されていないが既知の問題で、iOS 8/9シミュレーターが以前に実行された場合、NSUserDefaults/UserDefualtsがiOS 10シミュレーターで機能しないという問題です。

Macを再起動してXCode 8に直接進むと、iOS 10シミュレーターでこの問題が修正されます。

参照: なぜ私のアプリはXCode 8ベータ版(8S128d)で実行されません

12
Richard

Swift 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 
3