1

OS Xでドキュメントベースのアプリケーションを作成しています。このアプリケーションの機能の1つは、「インポート」機能です。

この関数は、生のBLOBとしてデータを含むデータファイルをディスクから読み取り、1つ以上のドキュメントに解析できます。この機能のために、プログラムでドキュメントを作成する必要があります。主な問題は、既存のデータからドキュメントを作成する方法NSDocumentControllerしかないということです。makeDocumentWithContentsOfURL:ofType:error:ドキュメントを作成する方法はいくつかありますが、どれが最もクリーンな方法か知りたいです。

  1. ドキュメントのデータをディスク上の個別のファイルに書き込み、makeDocumentWithContentsOfURL:ofType:errorそれぞれに対して:を呼び出すことができます。これはかなりエレガントではないようで、大量のデータでアプリの速度が低下する可能性があります。
  2. で空のドキュメントを作成しNSDocumentController、データを入力することができます。
  3. import関数でドキュメントを作成NSDocumentControllerし、addDocument:メソッドを使用してドキュメントをに追加できます。このメソッドはサブクラス化のフックのようであるため、これが機能するかどうかはわかりません。
  4. NSDocumentControlleraddメソッドをサブクラス化できmakeDocumentFromData:ofType:error:ます。これはクリーンですが、もっと複雑になると思います。

どう思いますか?

よろしく、クリス

4

3 に答える 3

1

これは、多くの BLOB を含むソース ドキュメントには対応しません。ソース ドキュメントで 50,000 個のドキュメントを作成する必要があるとしたら?

別のコンバータ アプリケーションの方がよいでしょう。単一の結果ドキュメントの抽出を NSOperation サブクラスにすることができるため、ドキュメントを並行して抽出できます。このアプリケーションは任意の数のドキュメントを処理でき、その UI はプログレス バーであり、場合によっては抽出される結果ドキュメントのリストになります (これまでに抽出されたドキュメントの横に [表示] ボタンがあります)。

このアプリケーションをメイン アプリケーションにバンドルするか、メイン アプリケーションにバンドルする(そして、ユーザーがソース形式のドキュメントを開こうとするたびに起動する) か、完全に別の製品にすることができます。

于 2009-12-31T13:25:18.463 に答える
1

1 つのソースから複数のドキュメントを作成することが本当に適切な場合 (つまり、無理な数のドキュメントを作成しないことがわかっている場合):

2. NSDocumentController を使用して空のドキュメントを作成し、データを入力できます。

4. NSDocumentController をサブクラス化し、makeDocumentFromData:ofType:error:メソッドを追加できます。これはきれいですが、より複雑になると思います。

#4の実装として#2が好きです。

于 2009-12-31T13:30:48.190 に答える
1

Tiger以降をターゲットにしている場合は、-[NSDocument readFromData:ofType:error]メソッドを使用してから呼び出してみ-[NSDocumentController addDocument:]ませんか? その後、サブクラス化を行わなくても問題ありません:)

各オブジェクトのデータを作成するには、 を使用してバイトへのポインターを取得し-[NSData bytes]、いくつかのポインター演算を使用-[NSData initWithBytesNoCopy:length:]することができます。これにより、一時ファイルを作成する必要がなくなります。

于 2010-01-02T05:59:24.450 に答える