NSDocument
をある形式で別の形式のNSDocument
にエクスポートするにはどうすればよいですか?MacアプリケーションでNSDocumentを書き出す
のエクスポートオプションをドキュメントベースのアプリケーションで実装したいと思います。私はフォーマット変換コードをどこに置くべきかわからず、既にCocoaによって提供されているものはありません。
NSDocument
をある形式で別の形式のNSDocument
にエクスポートするにはどうすればよいですか?MacアプリケーションでNSDocumentを書き出す
のエクスポートオプションをドキュメントベースのアプリケーションで実装したいと思います。私はフォーマット変換コードをどこに置くべきかわからず、既にCocoaによって提供されているものはありません。
すべての書き込みオプションNSDocument
には、書き込まれるファイルのタイプを指定する文字列パラメータがあります。したがって、dataOfType:error:
またはfileWrapperOfType:error:
のメソッドでは、サポートする各ファイルタイプの変換コードを実装する必要があります。
エクスポート操作を開始するには、saveToURL:ofType:forSaveOperation:completionHandler:
メソッドを使用して、希望のタイプと保存操作をNSSaveToOperation
にします。
文書データの読み込みと保存をサポートするためにオーバーライドできる方法の詳細については、this programming guideを参照してください。
クラスメソッドwritableTypes
またはインスタンスメソッドwritableTypesForSaveOperation:
から利用可能なタイプをNSSaveToOperation
で再度取得できます。
サポートしたいファイルタイプをInfo.plistファイルで宣言する必要があります。
NSDocumentサブクラスでインプレースの自動保存がサポートされていて、すべての書き込み可能なタイプも読み込み可能な場合は、既に提供されているタイプ変換ワークフローを使用することをおすすめします。 「保存」します。
このワークフローでは、ユーザーがドキュメントを「複製」すると、そのドキュメントはテンポラリファイル(自動保存されたファイルが保存される場所)に無題ドキュメントとして書き込まれます。ユーザーがドキュメントウィンドウを閉じると、アプリケーションはドキュメントを保存するか削除するように彼女に指示します。ドキュメントには永続URLはまだないので、ユーザにドキュメントタイプを選択させるアクセサリビューがNSSavePanelに表示されます。
このソリューションでは、すべてが既にCocoaによって提供されているため、ユーザーは「複製」と「保存」を使用できるため、特別な「エクスポート」機能をサポートするために何もする必要はありません。 引数(Svenは述べています)に従って、dataOfType:error:
またはfileWrapperOfType:error:
の書込み可能なすべてのタイプに文書を保存することができればよいだけです。
ここでの利点は、ファイルを閉じて(削除しないことを選択した)ユーザーがURLを選択する必要があり、「別名で保存」操作が実行されるドキュメントベースのアプリケーションの新しいワークフローと互換性があることです"複製"に続いて "保存"に置き換えられました。
書き込み不能なドキュメントのドキュメントを複製できることを確認する必要があります(これは、writeSafelyToURL:ofType:forSaveOperation:error:
ではなく元のファイルをコピーすることで実現できます)。
これは、各タイプごとに異なるサブクラスを持つことはお勧めしないということですか? – hpique
正確です。あなたの 'NSDocument'クラスは、ディスク上のファイル形式に依存しない特定の種類のドキュメント(テキストドキュメント、図面、...)を表現する必要があります。 – Sven
ドキュメント(同じリンク先)には、「複数のドキュメントタイプで複数のNSDocumentサブクラスを使用する」というセクションがあります。これからは、NSDocumentサブクラスごとに1つのタイプのみをサポートする必要があります。 – hpique