任意のインスタンスのプロパティを NSDictionary化、もしく NSDictionaryからインスタンスを復元するライブラリ。NSDictionaryをファイルへ書きだせばインスタンスの永続化が簡単に実現できる。NSObjectのカテゴリとしてメソッドが提供されている。
例えば
@implementation Sample @property (nonatomic, retain) name; @property (nonatomic, retain) email; @endというクラスがあった場合こんな感じでインスタンスをファイルに保存できる。
Sample* obj = [[Sample alloc] init]; obj.name = @"hello"; obj.email = @"[email protected]"; NSDictionary* dict = [obj dictionaryRepresentation]; [dict writeToFile:@"sample.plist" atomically:YES];簡単。復元はこの逆。これも簡単。
NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:@"sample.plist"]; Sample* obj = [Sample objectWithDictionaryRepresentation:dict];保存対象のプロパティを指定することができる。その場合は AMCKeysForDictionaryRepresentation をオーバーライドする。
対応しているプロパティの型は次の通り。構造体にも一部対応している。
Supported properties types AMC Enabled Objects. Common Collections (NSArray, NSMutableArray, NSDictionary, NSMutableDictionary) Custom Collections (Mutable/Not-Mutable, that can be used as keyValue(Dictionary) or Ordered(Array) collections ) Common Structures (NSRect/CGRect, NSSize/CGSize, NSPoint/CGPoint). Custom Structures (You will need to write additional code to encode/decode them to/from NSString).
仕組みは Objective-C のランタイムAPI を使い、プロパティを列挙してその名前をキーにして値を NSDictionary へ入れている。NSCoder/NSKeyedArchiver等は使っていない。ソースコードは Objective-CランタイムAPIの特にリフレクション系関数の使い方のお手本にもなる。