読者です 読者をやめる 読者になる 読者になる

pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

NSMutableArrayをNSUserDefaultsに入れて取り出すとimmutableになるってこと

Xcode

http://www.flickr.com/photos/35034363287@N01/4697192856
photo by Robert Scoble


はまってしまいました。


NSUserDefaultsにNSMutableArrayを保存し、それを取り出すと

[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object


というエラーが出て、mutableにしてあるのになんでだと思い、別の箇所を疑っていたのですがNSUserDefaultsから取り出すとNSMutableArrayがNSArrayになってしまうそうです。

// NSUserdefaultsからNSMutableArrayを取り出す
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSArray *postArray = [NSArray array];
NSMutableArray *mutablePostArray;
postArray = [ud objectForKey:@"test"];
// mutableに変換する
mutablePostArray = [postArray mutableCopy];


またmutable、immutableの変換の方法はいくつかあるそうです。


NSArrayとNSMutableArrayの相互変換
http://qiita.com/mikansensei/items/34eecfcdb08cc1e8e7db


単純なことですが、もう二度と忘れないようにということも含めて書き留めておきました。


参考

[iPhone開発]NSMutableArrayをNSUserDefaultに入れるときの注意 | つくりんぐ