2016-02-16 3 views
-1

Im сохранение словаря в NSUserDefaults следующим кодом:Доступ к данным __NSDictionaryI

let data = NSKeyedArchiver.archivedDataWithRootObject(self.markerArray) 
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "pins") 

Чтобы получить доступ к этой информации я использую

let outData = NSUserDefaults.standardUserDefaults().dataForKey("pins") 
let dict = NSKeyedUnarchiver.unarchiveObjectWithData(outData!) 

при печати Dict я получаю то, что я хочу: полный словарь данных (образец):

79 =  { 
    address = "Arizona, USA"; 
    category = nature; 
    id = 135; 
    lang = "-112.113"; 
    lat = "36.107"; 
    name = "Grand Canyon National Park"; 
    placeId = ChIJFU2bda4SM4cRKSCRyb6pOB8; 
    type = "point_of_interest"; 
}; 

Теперь, когда я хочу, чтобы получить доступ к конкретной записи, все это я получаю ноль

print(dict!["79"]!["name"]!) 

разархивирована словарь типа __NSDictionaryI, если это помогает. Запуск ниже код также печатает ноль

print("dict[79] is of type: \(dict!["79"]!.dynamicType)") 
+2

Сохранение словаря с именем переменных маркеров ** Массив ** довольно запутанный. – vadian

+0

Поскольку у вас уже есть 'NSKeyedArchiver', а данные просто сохраняют его в файле в каталоге Documents. Это гораздо лучшее решение. 'NSUserDefaults' действительно не предназначен для хранения данных, имя говорит много: Пользовательские настройки по умолчанию. – zaph

ответ

2

Скорее всего у вас есть проблемы типа. Почему 79 должен быть строкой? Я думаю, это просто номер (NSNumber).

Смотрите следующий пример:

let dict: NSDictionary = [ 
    79: "test 1", 
    "79": "test 2" 
] 

print(dict[79]) // prints "test 1" 
print(dict["79"]) // prints "test 2" 
+0

Я пробовал оба случая, его ноль. –

+0

@ArEsiiX Вы пытались проверить тип ключа? например используя 'print (dict.allKeys.map ({$ 0.description +" \ ($ 0.dynamicType) "}))'? – Sulthan