NSDocument
ある形式の を別の形式の別の形式にエクスポートするにはどうすればよいですNSDocument
か?
ドキュメントベースのアプリに典型的なエクスポートオプションを実装したいと考えています。フォーマット変換コードをどこに置くべきか、また Cocoa によって既に提供されているものがわからない。
NSDocument
ある形式の を別の形式の別の形式にエクスポートするにはどうすればよいですNSDocument
か?
ドキュメントベースのアプリに典型的なエクスポートオプションを実装したいと考えています。フォーマット変換コードをどこに置くべきか、また Cocoa によって既に提供されているものがわからない。
の書き込みオプションはすべて、書き込むNSDocument
ファイルの種類を指定する文字列パラメーターを取得します。そのため、dataOfType:error:
またはfileWrapperOfType:error:
メソッドでは、サポートするファイル タイプごとに変換コードを実装する必要があります。
エクスポート操作を開始するsaveToURL:ofType:forSaveOperation:completionHandler:
には、目的のタイプと の保存操作でメソッドを使用できますNSSaveToOperation
。
ドキュメント データの読み込みと保存をサポートするためにオーバーライドできるメソッドの詳細については、このプログラミング ガイドを参照してください。
クラス メソッドwritableTypes
またはインスタンス メソッドから利用可能な型を取得できwritableTypesForSaveOperation:
ますNSSaveToOperation
。
サポートするファイルの種類は、Info.plist ファイルで宣言する必要があります。
NSDocumentサブクラスがインプレース自動保存をサポートし、すべての書き込み可能な型も読み取り可能である場合(必要に応じて)、ユーザーが「複製」に続いて「保存」を使用する、すでに提供されている型変換ワークフローを使用することをお勧めします。 。
このワークフローでは、ユーザーがドキュメントを「複製」すると、無題のドキュメントとして一時ファイル(自動保存されたファイルが保存される場所)に書き込まれ、コピーされます。ユーザーがドキュメントウィンドウを閉じると、アプリはドキュメントを保存するか削除するように提案します。ドキュメントにはまだ永続的なURLがないため、NSSavePanelは、ユーザーがドキュメントタイプを選択できるアクセサリビューとともに表示されます。
このソリューションでは、すべてがすでにCocoaによって提供されており、ユーザーは「複製」に続いて「保存」を使用できるため、特別な「エクスポート」機能をサポートするために何もする必要はありません。引数に従って、dataOfType:error:
または引数に従って、すべての書き込み可能なタイプにドキュメントを保存できる必要があるだけです(Svenが言ったように)。fileWrapperOfType:error:
typeName
ここでの利点は、ユーザーがファイルを閉じるときにのみURLを選択する必要があることです(ファイルを削除しないことを選択します)。また、「名前を付けて保存」操作が次のように置き換えられたドキュメントベースのアプリの新しいワークフローと互換性があります。 「複製」の後に「保存」が続きます。
また、書き込み不可能なドキュメントのドキュメントを複製できることも確認する必要があることに注意してください(これは、を使用する代わりに元のファイルをコピーすることで実現できますwriteSafelyToURL:ofType:forSaveOperation:error:
)。