NSFileWrapper
ドキュメントベースのアプリケーションでパッケージディレクトリとして使用できます。
アプリケーションのInfo.plistファイルで、ドキュメントタイプがパッケージまたはバンドル(LSTypeIsPackage
値を持つキーYES
)であることを記述します。
NSDocument
サブクラスで、読み取りと書き込みのために次のメソッドを実装します。この例では、対応するモデルインスタンス変数がpdfData
とsignatureBitmapData
であると想定しています。これらはそれぞれMainDocument.pdfとSignatureBitmap.pngの下のパッケージディレクトリに格納されています。
- (BOOL)readFromFileWrapper:(NSFileWrapper *)dirWrapper
ofType:(NSString *)typeName
error:(NSError **)outError
{
NSFileWrapper *wrapper;
NSData *data;
wrapper = [[dirWrapper fileWrappers] objectForKey:@"MainDocument.pdf"];
data = [wrapper regularFileContents];
self.pdfData = data;
wrapper = [[dirWrapper fileWrappers] objectForKey:@"SignatureBitmap.png"];
data = [wrapper regularFileContents];
self.signatureBitmapData = data;
…
return YES;
}
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName
error:(NSError **)outError
{
NSFileWrapper *dirWrapper = [[[NSFileWrapper alloc]
initDirectoryWithFileWrappers:nil] autorelease];
[dirWrapper addRegularFileWithContents:self.pdfData
preferredFilename:@"MainDocument.pdf"];
[dirWrapper addRegularFileWithContents:self.signatureBitmapData
preferredFilename:@"SignatureBitmap.png"];
…
return dirWrapper;
}
ユーザーの観点からは、パッケージディレクトリは、Xcode .xcodeprojディレクトリやアプリケーションバンドルのように、単一のファイルであるかのようにFinderに表示されます。