NSDocument に非同期保存を実装したいと思います。ドキュメントによると、書き込み中にYES を返してcanAsynchronouslyWriteToURL:ofType:forSaveOperation:
から呼び出す必要があります。unblockUserInteraction
私のドキュメントではfileWrapperOfType:error:
、NSFileWrapper を返すだけで書き込みが実行されます。
- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
return self.myMutableFileWrapper;
}
これについて、ドキュメントには次のように書かれています。
たとえば、 fileWrapperOfType:error: のデフォルトの実装は、返す NSFileWrapper オブジェクトを作成したときに [unblockUserInteraction] を呼び出します。NSFileWrapper が後続のユーザー アクションによって変更されないと仮定すると、それは実質的にドキュメントのコンテンツの「スナップショット」であり、一度作成されると、メイン スレッドでユーザー イベントの処理を安全に再開できます。 NSFileWrapper オブジェクトが安全に書き込まれる前に、ドキュメントの内容を変更してください。
現在、私のコードでは のself.myMutableFileWrapper
後に変更できるfileWrapperOfType:error
ため、ドキュメントに記載されているように変更されないとは限りません。
これは、ファイル ラッパーのコピーを作成するように変更fileWrapperOfType:error:
してから を呼び出す必要があるということunblockUserInteraction
ですか? このようなもの:
- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
NSFileWrapper *copyFileWrapper = MakeACopyOf(self.myMutableFileWrapper);
[self unblockUserInteraction];
return copyFileWrapper;
}
上記が正しい場合、NSFileWrapper のコピーを作成するにはどうすればよいですか? また、潜在的に巨大な NSFileWrapper のコピーを作成すると、非同期保存のパフォーマンス上の利点が無効になりませんか?