2

データの保存と読み込みにサードパーティのライブラリを使用するアプリケーションがあります。通常、NSDocument を使用する場合、- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outErrorメソッドをオーバーライドして適切なデータを返しますが、このライブラリでは、保存ルーチンにしかアクセスできません (複数のファイルを作成することもできます。それ以外の場合は、一時ファイルに保存してそのデータを返します)。一時ファイル)。

私も次のことを試しました:

- (void)saveToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation completionHandler:(void (^)(NSError *errorOrNil))completionHandler
{
   librarySaveFunction(url.path);
}

これは機能しますが、ドキュメントのタイトルは「MyFile - Edited」のままで、もう一度保存しようとすると、ドキュメントが別のアプリケーションによって更新されたというエラーが表示されます (ファイルの変更日を設定することでこれを解決できました。しかし、ファイルはまだ編集済みとしてマークされており、非常にハッキングされているように感じます)。

保存ルーチンをオーバーライドするためのより良い方法について、より良い提案がある人はいますか?

4

1 に答える 1

3

NSDocument には、データの読み取りと書き込みに関連するメソッドの巨大な階層があります。どちらをオーバーライドするかは、特定の状況の詳細と、デフォルトの読み取り/書き込み機構との関係に大きく依存します。この質問を見たときの直感的な反応は、メソッドをオーバーライドしたくない、-save*メソッドをオーバーライドしたい-write*(おそらく-writeToURL:ofType:forSaveOperation:originalContentsURL:error:) というものでしたが、アプリの詳細 (およびこれ) について詳しく知らずに言うのは本当に難しいです使用しているサードパーティのライブラリ)。

さまざまなオーバーライド ポイントとそれらが適している状況に関する決定的な議論は、こちらにあります。

于 2013-09-25T12:55:23.037 に答える