画像などのデータを取り扱う場合、CoreDataの保存ファイルとは別に画像ファイルそのままで保存して全体を1つのパッケージとしてまとめたい。ところが、info.plistにはパッケージのオプション(LSTypeIsPackage)はあるものの NSPersistentDocumentではこれは使えない。どうしたものかと Googleで情報を集めたところ方法が見つかった。
(1) Core Data Document-based Applicationでファイルパッケージを扱う
狙いは良いのだが残念なことに肝心の保存・読み込み部分が完成していない。
(2) Using NSPersistentDocument o save and open packages
- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType error:(NSError **)error
をオーバーライドする方法が記載されていた。が、保存時にエラーが出てうまく動かなかった(10.5にて)。
(3) Packages and Core Data documents
Ruby-cocoaによる実装例になるが同等のコードをobjective-c で書いたところ、こちらはうまくいった。
サンプル:sample20080103-2.zip
Test という名前で保存するとパッケージが作成され、その中に data.xmlという CoreDataによって作成されたデータファイルが保存される。読み込みも Test の指定で行える。