【问题标题】:Saving CLLocation error: Mutating method sent to immutable object保存 CLLocation 错误:发送到不可变对象的变异方法
【发布时间】:2014-08-17 16:46:37
【问题描述】:

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

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

这是我收到的错误消息:

* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object”

这是我的代码:

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

“lastKnownLocation”变量是一个 CLLocation。 plist 中的“位置”键属于“数据”类型。有人可以帮忙并让我知道如何做到这一点(或者如果有更好的方法他们如何做到这一点)?谢谢

【问题讨论】:

    标签: ios swift plist cllocation nskeyedarchiver


    【解决方案1】:

    您需要将NSDictionary 更改为NSMutableDictionary

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

    【讨论】:

      【解决方案2】:
      plist.setValue(dataToStore, forKey: "location")
      

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

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

      将这里的NSDictionary 更改为NSMutableDictionary

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 2016-11-17
        相关资源
        最近更新 更多