いserialize単純なオブジェクトiPhoneす。
-
22-08-2019 - |
質問
している辞書のオブジェクト彼らはすべてPOCOオブジェクトは直列化可能です。法を眺めながらディスク。私ための最も簡単なオプションを書く少数のリストを保存します。
私で3オプション
plistファイルです。しかしこのようだが将来の見通しを見直すとは限り保存定義済みのオブジェクト(文字列、数値など)のないオブジェクト(のような人の名前です。
CoreData.(新3.0)こうもしかし私のデータモデル変更が必要なことです。その一環として行われた大量の手戻りやくなった場合の価値は十分あります。
SQLLite.実施の簡単なSQLデータベース読みから.そして、少ない研究へのここがいいを書き換え'の核データORMます。
解決
あなたは、Mac OS X上でそれを行うだろうと同じ方法でこれを行う:あなたのPOCOSはNSCoding
プロトコルに準拠する必要があります。概念的な参照のためにここにのを参照してください、とこちらNSCoding参照のを
、PLISTとしてすべてを書くことはおそらくあなたの最良の選択肢です。それはあなたのコードで実装するのに非常に実行するために迅速かつ簡単です。あなたが言ったように、CoreDataは、おそらくにあなたのコードを適応させるために余分な作業のの多くのだろう、とSQLiteは本当にリレーショナルデータベースに格納するには最適ですデータを格納するための唯一の良いです。 sqliteのも遅く、バイナリプレースメントリストでの作業よりも多くのリソースを使用していることに注意してください。
他のヒント
カスタムオブジェクトをシリアル化するために、あなただけのNSCoding
プロトコルに準拠する必要があります。あなたのオブジェクトはNSObjectのを拡張する場合は、あなたが(私は信じている)する必要があるすべては、これらの(人物オブジェクトの一例)を実装することです。
// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:name forKey:@“Name”];
[coder encodeInteger:age forKey:@“Age”];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
name = [[coder decodeObjectForKey:@“Name”] retain];
age = [coder decodeIntegerForKey:@“Age”];
}
NSArray
とNSDictionary
は、すでに直列化するためのメソッドを実装します。 (オブジェクトは、NSCoderインターフェイスを実装している場合 - 彼らはNSObjectのを拡張する場合、彼らは行う)彼らは、彼らが保有するすべてのオブジェクトをシリアル化します。あなたは何も連載されなかっ取得し、あなたのクラスで独自のコードを実装しない限り、NSObjectののencodeWithCoder
とinitWithCoder
は、デフォルトでは何もしません。
あなたがオブジェクトのたNSArrayやNSDictionaryのを持っている場合は、使用してそれらを同期させることができます:
// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;
NSCoder
をシリアライズするための標準的なココアのイディオムです。