2013-01-16 5 views
6

NSDocumentをある形式で別の形式のNSDocumentにエクスポートするにはどうすればよいですか?MacアプリケーションでNSDocumentを書き出す

のエクスポートオプションをドキュメントベースのアプリケーションで実装したいと思います。私はフォーマット変換コードをどこに置くべきかわからず、既にCocoaによって提供されているものはありません。

答えて

7

すべての書き込みオプションNSDocumentには、書き込まれるファイルのタイプを指定する文字列パラメータがあります。したがって、dataOfType:error:またはfileWrapperOfType:error:のメソッドでは、サポートする各ファイルタイプの変換コードを実装する必要があります。

エクスポート操作を開始するには、saveToURL:ofType:forSaveOperation:completionHandler:メソッドを使用して、希望のタイプと保存操作をNSSaveToOperationにします。

文書データの読み込みと保存をサポートするためにオーバーライドできる方法の詳細については、this programming guideを参照してください。

クラスメソッドwritableTypesまたはインスタンスメソッドwritableTypesForSaveOperation:から利用可能なタイプをNSSaveToOperationで再度取得できます。

サポートしたいファイルタイプをInfo.plistファイルで宣言する必要があります。

+0

これは、各タイプごとに異なるサブクラスを持つことはお勧めしないということですか? – hpique

+1

正確です。あなたの 'NSDocument'クラスは、ディスク上のファイル形式に依存しない特定の種類のドキュメント(テキストドキュメント、図面、...)を表現する必要があります。 – Sven

+0

ドキュメント(同じリンク先)には、「複数のドキュメントタイプで複数のNSDocumentサブクラスを使用する」というセクションがあります。これからは、NSDocumentサブクラスごとに1つのタイプのみをサポートする必要があります。 – hpique

1

NSDocumentサブクラスでインプレースの自動保存がサポートされていて、すべての書き込み可能なタイプも読み込み可能な場合は、既に提供されているタイプ変換ワークフローを使用することをおすすめします。 「保存」します。

このワークフローでは、ユーザーがドキュメントを「複製」すると、そのドキュメントはテンポラリファイル(自動保存されたファイルが保存される場所)に無題ドキュメントとして書き込まれます。ユーザーがドキュメントウィンドウを閉じると、アプリケーションはドキュメントを保存するか削除するように彼女に指示します。ドキュメントには永続URLはまだないので、ユーザにドキュメントタイプを選択させるアクセサリビューがNSSavePanelに表示されます。

このソリューションでは、すべてが既にCocoaによって提供されているため、ユーザーは「複製」と「保存」を使用できるため、特別な「エクスポート」機能をサポートするために何もする必要はありません。 引数(Svenは述べています)に従って、dataOfType:error:またはfileWrapperOfType:error:の書込み可能なすべてのタイプに文書を保存することができればよいだけです。

ここでの利点は、ファイルを閉じて(削除しないことを選択した)ユーザーがURLを選択する必要があり、「別名で保存」操作が実行されるドキュメントベースのアプリケーションの新しいワークフローと互換性があることです"複製"に続いて "保存"に置き換えられました。

書き込み不能なドキュメントのドキュメントを複製できることを確認する必要があります(これは、writeSafelyToURL:ofType:forSaveOperation:error:ではなく元のファイルをコピーすることで実現できます)。

関連する問題