1

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

Narwhal
  • 744
  • 1
  • 8
  • 22

2 Answers2

2

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
zaph
  • 111,848
  • 21
  • 189
  • 228
1
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.

BergQuester
  • 6,167
  • 27
  • 39