1

У меня есть изменяемый словарь (в форме [Int: Int]) и хочу, чтобы он его сохранил. Я хотел бы использовать NSUserDefaults так:Как установить словарь в NSUserDefault в swift?

var myDic: NSMutableDictionary = [:] 
     myDic = [1:2] 
     NSUserDefaults.standardUserDefaults().setObject(myDic, forKey: "myDic") 

, но с этим я получаю сообщение об ошибке:

Thread 1: signal SIGABRT

Я понятия не имею, почему.

ответ

2

setObject(_:forKey:) не может принять Dictionary с ключом, который является целым. Для этого метода требуются объекты списка свойств, но myDic = [1:2] не является объектом списка свойств.

Существует два документа об этом.

setObject(_:forKey:) of NSUserDefaults

The value parameter can be only property list objects: NSData , NSString , NSNumber , NSDate , NSArray , or NSDictionary . For NSArray and NSDictionary objects, their contents must be property list objects.

About Property Lists

And although NSDictionary and CFDictionary objects allow their keys to be objects of any type, if the keys are not string objects, the collections are not property-list objects.

Если вы установите целочисленный ключ к Dictionary, то Dictionary объекта не может быть использован для значения setObject. Вы должны использовать строку для этого ключа:

myDic = ["1": 2] 
+0

Дайм, это отличный ответ. На самом деле, как босс. Ты мне нравишься. Большое спасибо. Попробуем попробовать, как только смогу ... – Sam

+0

ОК это экономит .. но как я могу переконвертировать обратно в int, и я хочу добавить к нему некоторые объекты. Теперь я решил все это, сделав «let tempDic = myDic.muableCopy()». Есть ли более простой способ? – Sam

+0

в любом случае, это woks. так: СПАСИБО МНОГО! – Sam