Search code examples
iosswiftplistcllocationnskeyedarchiver

Saving CLLocation error: Mutating method sent to immutable object


I have read the other related questions, but I am stuck.

I am trying to save the last known location into a plist for later use.

Here is the error message I am receiving:

* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'

Here is my code:

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

The "lastKnownLocation" var is a CLLocation. The "location" key in the plist is of type "data". Could someone please assist and let me know how to do this (or how they do it if there is a better approach)? Thank you


Solution

  • You need to change the NSDictionary to an NSMutableDictionary.

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