Core Data Document-based Applicationでファイルパッケージを扱う (1)

Core Data Document-based ApplicationではFileWrapperを使えない?


Core Data Document-based Applicationでは,ドキュメントの管理はNSPersistentDocumentが行なう。
テンプレートにはいっているMyDocumentは,NSPersistentDocumentのサブクラス。
これを使えば,とくに何も書かなくても,ひとつのCoreDataファイル(永続ストア)の生成,読み書きをしてくれる。


逆から言うと,NSPersistentDocumentによるCore Data Document-based ApplicationではCore DataがサポートするXML,Binary,SQLiteのファイルしか(自動的には)扱えないのであって,つまり,ひとつのドキュメントのデータはひとつのCoreDataファイルとして保存されることを想定している。


http://www.cocoadev.com/index.pl?NSPersistentDocumentAsPackageにもあるように,NSPersistentDocumentではFileWrapperの読み書きをサポートしていないから,CoreDataファイルをあるFilePackageのなかに保存し,扱うことはむずかしい。

FileWrapperというか,File Packageが使えればいいんだけど


Core Dataでオブジェクトグラフを管理したいんだけど,画像やムービーなんかのデータはCore Dataの内部じゃなくてファイルとして保持したい。また,Core Dataに入れるまでもない設定ファイルとかその他関連ファイル,…なんかを別ファイルとして保持したい。


こういう場合,単にフォルダにCoreDataファイルとかその他ファイルを入れて,そのうちどれかのファイルをApplicationで開くようにしてもいいけれど(Xcodeのプロジェクトフォルダと,xcodeprojファイルのように),頻繁にFinderでフォルダ内部のファイルへアクセスする必要がなく,フォルダをひとつのファイルのように見せて,フォルダをダブルクリックで開けたりする方が便利ならば,ファイルパッケージを使うことができる。
ファイルパッケージの例としては,リッチテキストのrtfdとか。インラインの画像ファイルとか入ってるはず。


なんとかしてCore Data Document-based Applicationで簡単にファイルパッケージを扱えないかなぁ。

プロジェクトをつくってみる


とりあえずの目標を,ファイルパッケージの中にCoreDataファイルを格納し,Finderからはファイルパッケージのダブルクリックで開くことにする。

続きを読む