9

この議論がすでにカバーされているかどうか申し訳ありませんが、いくつかの調査の結果、正確なものは何も見つかりませんでした。

ドキュメントベースのアプリケーションを作成する必要があります。ドキュメントは実際には単一のファイルではなく、ファイルの構造化されたコレクションであり、ディレクトリ内にあります。ウィンドウには、フォルダに含まれている特定のファイル名のPDFが表示され、フォルダ内の他のファイルからの情報で強化されます。これを実現するためにPDF注釈を使用することはできません。実際には、ファイルをPDFから分離しておく必要があります。

これを達成するための最良のアプローチは何ですか?私が見つけたすべてのサンプルコードは、単一のファイルを使用しています。

4

1 に答える 1

13

NSFileWrapperドキュメントベースのアプリケーションでパッケージディレクトリとして使用できます。

アプリケーションのInfo.plistファイルで、ドキュメントタイプがパッケージまたはバンドル(LSTypeIsPackage値を持つキーYES)であることを記述します。

NSDocumentサブクラスで、読み取りと書き込みのために次のメソッドを実装します。この例では、対応するモデルインスタンス変数がpdfDatasignatureBitmapDataであると想定しています。これらはそれぞれ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に表示されます。

于 2011-04-15T10:47:53.590 に答える