2016-09-07 9 views
2

私は、よく使用されていたNSUserDefaultsに[Int:String]型の辞書を保存しようとしていましたが、最近はそうではありません。保存メソッドが呼び出されて決して回復しない場合、macOSプログラムは(虹ローダで)スタックされます。Swift - 辞書をNSUserDefaultsに保存するときにスタックされた問題

私は前にこれを行うことができたので、これはNSUserDefaultsが私のMacに格納されている場所と関係があると思われます(私はそれがどこにあるのか分かりません)。

let defaults = NSUserDefaults.standardUserDefaults() 
    var dict: [Int: String] = [:] 
    dict[1] = "123512" 
    dict[2] = "1231232" 
    dict[3] = "112512" 
    dict[4] = "1212081" 
    print(dict) 
    defaults.setObject(dict, forKey: "cameraOrder") 

現在、objectForKey: "cameraOrderは" 空で、私は端末上で "デフォルトは[バンドルID]を削除" を呼び出すことによって行った

は、ここに私のコードです。

ご協力いただきありがとうございます。

ADDITIONAL INFO

私はかもしれないが、問題は、辞書型の節約とは何かを持っているかもしれないと思います。このコードを実行すると:

defaults.setObject("12", forKey: "cameraOrder") 
    print(defaults.objectForKey("cameraOrder")) 

これは完全に機能します。驚くべきことに

、私は[文字列:文字列]タイプの辞書を保存した場合でも、それは(「1」にキーの変更1)作品

+0

はNSUserDefaults –

+0

defaults.objectForKey(「cameraOrder」)から辞書が、ちょうど省がプログラムは永遠にこだわって作るので、私の問題は、フェッチではなく、 。 –

+0

@EricAyaあなたが正しいのであれば答えを見てください。 –

答えて

2

が適切NSUserDefaultsから辞書フェッチするようにしてください。

let userDefaults = NSUserDefaults.standardUserDefaults() 

if let dictionaryForUserDefaults = userDefaults.dictionaryForKey("cameraOrder") as? [Int: String] { 

} 

今日私はこの問題を調査します。実際のXcodeでテストしてみてください。

コードを実行すると、Xcodeにコードが表示されます。

非プロパティリストオブジェクトを設定しようとしました。{ 2 = 123512; 3 = 123512; 1 = 123512; 4 = 123512; }をキーcameraOrderのNSUserDefaults/CFPreferences値として

Dictionaryがnon-property-list objectではないと結論することは可能です。アップルのドキュメントから慎重に読むことができます:

とNSDictionaryのとCFDictionaryオブジェクトはキーが文字列オブジェクトでない場合 へのキーは、任意の型のオブジェクトで許可するものの、 コレクションはプロパティリストオブジェクトではありません。

大文字と小文字の区別はIntであり、問​​題があります。問題の試みの課題を解決するための

:あなたはyoureのを取得する方法

let defaults = NSUserDefaults.standardUserDefaults() 

let key = "cameraOrder" 

var dict: [String: String] = [:] 
dict["1"] = "123512" 
dict["2"] = "1231232" 
dict["3"] = "112512" 
dict["4"] = "1212081" 

print(dict) 

defaults.setObject(dict, forKey: key) 
+0

私はフェッチしようとしましたが(オブジェクトと辞書の両方)、それはnilを返します。問題は問題なく保存することです。 –

+0

ありがとうオレグ、これはまさに私がやったことですが、あなたのよく書かれた答えが大いに役立ちます。将来他の人に役立つことがわかったら、私の質問をアップアップしてください。 –

関連する問題