swift NSUserDefault で NSMutableArray が使えなくなった!
NSUserDefaultでのつまずきです。
NSUserDefaultにMutable(変更可)なインスタンスを保存し
取り出すとImmutable(変更不可)になり
下のようなエラーがでる
[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
対策としては、
取り出したインスタンスをmutableCopy()を行い
ImmutableからMutableなものに変換する
//保存される配列 var Array:NSMutableArray = [0] var ArrayImmutable:NSMutableArray = [0] var ArrayMutable:NSMutableArray = [0] //Arrayを保存 let defalts = NSUserDefaults.standardUserDefaults() defalts.setObject(Array, forKey: "testArray") //通常通りArrayを読み込む ArrayImmutable = defalts.objectForKey("testArray") as NSMutableArray! //変更不可の為 error ArrayImmutable.addObject(1) //mutableCopy()を使用し読み込む ArrayMutable = defalts.objectForKey("testArray")?.mutableCopy() as NSMutableArray //変更可 ArrayMutable.addObject(1)
参考
きみが思い出になる前に - NSUserDefaultsに保存したmutableなオブジェクトはmutableCopyを使って作り直す