2016-05-02 2 views
0

Я пытаюсь сохранить словарь в NSUserDefaults с помощью функции setObject(), но когда я использую функцию objectForKey() для извлечения словаря, он возвращает nil. Почему это происходит?Словарь, сохраненный в 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 в Playground.

См: https://stackoverflow.com/a/31210205/3498950

Вторая проблема найдена, когда приведённый выше код работает в обычном проекте IOS. Он выбрасывает NSInvalidArgumentException, поскольку словарь является объектом списка объектов, не относящихся к свойствам, поскольку ключи должны быть типа String.

Хотя NSDictionary и CFDictionary объекты позволяют их ключам быть объектами любого типа, если ключи не являются строковыми объектами, то коллекции не являются собственностью-список объектов.

См: «What is a Property List?» в компании Apple Docs

+0

Вы пробовали код в точности выше? Это не работает для меня. Он выдает исключение: «Попытка установить объект не-свойство-списка { 6 = brooke; 3 = spencer; 11 = jason; } в качестве значения NSUserDefaults/CFP для значения ключевых словKey". –

+1

(Это потому, что словари «property-list» должны иметь строки как ключи. См. [«Что такое список свойств?»] (Https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists /AboutPropertyLists/AboutPropertyLists.html#//apple_ref/doc/uid/10000048i-CH3-54303) в документах Apple, а также [этот вопрос] (http://stackoverflow.com/questions/22704678/nsdictionary-with-nsnumber -в-NSString-отображение-это-неимущественный-список-объект).) –

Смежные вопросы