保存CLLocation错误:发送到不可变对象的变异方法

我已经读了其他相关的问题,但我卡住了。

我正在尝试将最后一个已知位置保存到plist中以备后用。

这是我收到的错误消息:

*终止应用程序由于未捕获的exception'NSInternalInconsistencyException',原因:' – [__ NSCFDictionary setObject:forKey:]:mutating方法发送到不可变对象'

这是我的代码:

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

“lastKnownLocation”var是一个CLLocation。 plist中的“位置”键是“数据”types。 有人可以请帮助,让我知道如何做到这一点(或如果有更好的办法他们如何做)? 谢谢

您需要将NSDictionary更改为一个NSMutableDictionary

 var path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") var plist: NSMutableDictionary = NSDictionary(contentsOfFile: path).mutableCopy() as NSMutableDictionary 
 plist.setValue(dataToStore, forKey: "location") 

你不能在NSDictionary上调用setValue ,因为它是一个变异的方法, NSDictionary是不可变的。

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

NSDictionary更改为NSMutableDictionary