0

重複の可能性:
NSUserDefaultsのNSMutableArrayにカスタムオブジェクトを保存するNSUserDefaultsに
カスタムオブジェクトを保存する方法

「Animal」というクラスからインスタンス化されたオブジェクトをNSMutableArrayに格納して、NSUserDefaultsに格納しようとしました。ただし、このエラーが発生します。

[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
    "<Animal: 0xcea7060>"
)' of class '__NSArrayM'.  Note that dictionaries and arrays in property lists must also contain only property values.

これは何を意味するのでしょうか?おそらく、NSUserDefaultsに格納するオブジェクトをNSMutableArraysに格納できないのでしょうか。

4

2 に答える 2

3

NSUserDefaults配列と辞書は、変更可能かどうかに関係なく格納できますが、それらにproperty-list-legalクラス(、、、、NSNumberおよびその他NSStringNSDataいくつか)が含まれている場合に限ります。他のクラスの場合は、オブジェクト をに入れる前に(または、プロパティリストに入れたり書き込んだりするコレクションに)、オブジェクトをシリアル化する必要があります。NSDataNSUserDefaultsNSUserDefaults

ほとんどのアプリではカスタムクラスを導入することはあまりないので、自分が本当にそこに属してNSUserDefaultsいるかどうかも検討する必要があります。設定、状態、およびその他の小さなことのためのものであることをAnimal忘れないでください。アプリが管理するデータは、他の場所に保存する方が適切です。アーカイブNSUserDefaultsリストまたはプロパティリストを使用して、アプリのサンドボックスにファイルを書き込んだり、コアデータ(またはその他のデータベース)にファイルを書き込んだりします。

于 2012-04-12T19:54:37.537 に答える
-3

チェックアウトArchiveまたはSerialization

于 2012-04-12T20:02:03.400 に答える