2016-05-02 13 views
0

setObject()関数を使用して辞書をNSUserDefaultsに保存しようとしていますが、objectForKey()関数を使用して辞書を取得すると、nilが返されます。なぜこうなった?DictionaryをNSUserDefaultsに保存すると常にnilが返されます

var data = NSUserDefaults.standardUserDefaults(); 
var scoreboard = [Int : String]() 
let scores = "scoresKey" 

scoreboard[3] = "spencer" 
scoreboard[6] = "brooke" 
scoreboard[11] = "jason" 

data.setObject(scoreboard, forKey: scores) 
data.objectForKey(scores) // Returns nil 
+1

は、あなたが実際のプロジェクトでそれをテストする必要があります。遊び場ではありません –

+0

このチュートリアルをご覧ください:http://iosdevcenters.blogspot.com/2016/05/save-data-using-nsuserdefaults-in-swift.html –

答えて

1

最初の問題は、それが遊び場でNSUserDefaultsを使用することはできませんということでした。

参照:上記のコードは、通常のiOSプロジェクトで実行するときhttps://stackoverflow.com/a/31210205/3498950

第二の問題が発見されました。キーはString型でなければならないため、辞書は非プロパティリストオブジェクトだったので、NSInvalidArgumentExceptionがスローされます。

NSDictionaryのとCFDictionaryオブジェクトはキーが文字列オブジェクトでない場合、そのキーは、任意の型のオブジェクト ことを可能にするが

、 コレクションはプロパティリストオブジェクトではありません。

を参照してください:Appleのドキュメントで「What is a Property List?

+0

上記の正確なコードを試しましたか?それは私にとってはうまくいかない。 「キー以外のプロパティリストオブジェクトを設定しようとすると、キースコアのNSUserDefaults/CFPreferences値として、プロパティリストオブジェクト( 6 = brooke; 3 = spencer; 11 = jason; )を設定しようとしました。 –

+1

(これは "property-list"辞書が文字列をキーとして持つ必要があるためです)["プロパティリストとは何か"](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists /AboutPropertyLists/AboutPropertyLists.html#//apple_ref/doc/uid/10000048i-CH3-54303)、また、[この質問](http://stackoverflow.com/questions/22704678/nsdictionary-with-nsnumber) -to-nsstring-mapping-non-property-list-object)を参照してください)。 –

関連する問題