1
votes

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

2

2 Answers

2
votes

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
1
votes
plist.setValue(dataToStore, forKey: "location")

You can't call setValue on an NSDictionary as it is a mutating method and NSDictionary is immutable.

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

Change NSDictionary in this to NSMutableDictionary.