Ошибка сохранения CLLocation: метод мутации отправлен в неизменяемый объект

Я прочитал другие связанные вопросы, но я застрял.

Я пытаюсь сохранить последнее известное местоположение в plist для последующего использования.

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

* Завершение работы приложения из-за необработанного исключения "NSInternalInconsistencyException", причина: "-[__NSCFDictionary setObject:forKey:]: изменяющий метод отправлен в неизменяемый объект"

Вот мой код:

var plist = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Config", ofType: "plist"))
var dataToStore = NSKeyedArchiver.archivedDataWithRootObject(lastKnownLocation)
plist.setValue(dataToStore, forKey: "location")

Переменная lastKnownLocation — это CLLocation. Ключ «местоположение» в plist имеет тип «данные». Может ли кто-нибудь помочь и сообщить мне, как это сделать (или как они это делают, если есть лучший подход)? Спасибо


person Narwhal    schedule 17.08.2014    source источник


Ответы (2)


Вам нужно изменить NSDictionary на NSMutableDictionary.

var path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist")
var plist: NSMutableDictionary = NSDictionary(contentsOfFile: path).mutableCopy() as NSMutableDictionary
person zaph    schedule 17.08.2014

plist.setValue(dataToStore, forKey: "location")

Вы не можете вызвать setValue для NSDictionary, так как это изменяющий метод, а NSDictionary неизменяем.

var plist = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Config", ofType: "plist"))

Измените NSDictionary здесь на NSMutableDictionary.

person BergQuester    schedule 17.08.2014