2016-09-07 2 views
2

Я пытался сохранить словарь типа [Int: String] в NSUserDefaults, который работал хорошо, но в последнее время просто не будет. Программа macOS застревает (с загрузчиком радуги), когда метод сохранения вызывается и никогда не восстанавливается.Программа Swift - macOS Застревает при сохранении словаря в 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" пусто, что я сделал с помощью вызова "по умолчанию удалить [Bundle ID]" на терминале.

Заранее за вашу помощь.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Я думаю, что проблема может, возможно, что-то делать с сохранением типа словаря. Если я запустил этот код:

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

Он работает отлично.

Удивительно, но даже если я сохраняю словарь типа [String: String] он работает (Изменение ключа от 1 до "1")

+0

как вы запрашиваете Youre словарь из NSUserDefaults –

+0

defaults.objectForKey («cameraOrder»), но моя проблема не с выборкой, так как только экономия делает программу вечно застревает , –

+0

@EricAya не могли бы вы взглянуть на ответ, если он будет правильным. –

ответ

2

Try для извлечения правильно словаря с NSUserDefaults.

let userDefaults = NSUserDefaults.standardUserDefaults() 

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

} 

Сегодня я исследую эту проблему. Попробуйте протестировать с помощью реального Xcode, а не с игровой площадки.

Когда вы запускаете код, вы получите код Xcode.

Попытка установить объект, не относящийся к объекту { 2 = 123512; 3 = 123512; 1 = 123512; 4 = 123512; } как значение NSUserDefaults/CFPreferences для ключевой камерыOrder

Можно сделать вывод, что Словарь не является non-property-list object. И давайте внимательно читать яблоневых документы:

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

Так что ключи в вашем случае - это Int и есть проблема.

Для решения вопроса о попытке:

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

Я попробовал выборку (как объект, так и словарь), но он возвращает нуль. Проблема заключается в сохранении без вопросов. –

+0

Спасибо, Олег, это именно то, что я закончил, но ваш хорошо документированный ответ помогает. Пожалуйста, также подумайте над тем, чтобы решить мой вопрос, если вы обнаружите, что он может быть полезен другим в будущем. –

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