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

时间:2014-08-17 16:46:38

标签: ios swift plist cllocation nskeyedarchiver

我已阅读其他相关问题,但我被困住了。

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

以下是我收到的错误消息:

  

* 由于未捕获的异常'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中的“location”键是“data”类型。有人可以协助并让我知道如何做到这一点(或者如果有更好的方法,他们如何做到这一点)?谢谢

2 个答案:

答案 0 :(得分:2)

您需要将NSDictionary更改为NSMutableDictionary

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

答案 1 :(得分:1)

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

您无法在setValue上呼叫NSDictionary,因为它是一种变异方法,NSDictionary是不可变的。

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

将此NSDictionary更改为NSMutableDictionary