NSPersistentDocumentのサブクラスで、writeSafelyToURL:ofType:forSaveOperation:error:を実装しようとしています。私は実質的にSQLiteストアの複製操作であるNSAutosaveElsewhereOperation条件を処理する必要があります。SQLiteストアを複製する
次のコードは、重複したストアを作成する際に問題がありますが、実際にはストアは空であり、理由がわかりません。私は "Revert Document"オプションを使用したときに問題に気付きましたが、 "Duplicate"メニュー項目を使ってみると明らかになりました。
基本的には、現在のストアを削除しようとしているため、保存されません。次に、一時ストアを追加し、コンテキストを保存し、一時ストアを削除し、元のストアを追加し直します。
if (inSaveOperation == NSAutosaveElsewhereOperation) {
NSPersistentStoreCoordinator *coordinator = [[self managedObjectContext] persistentStoreCoordinator];
id tempStore = [coordinator addPersistentStoreWithType:@"SQLite" configuration:nil URL:storeURL options:nil error:outError];
success = (tempStore != nil);
id originalStore = [coordinator persistentStoreForURL:originalStoreURL];
success = success &&
[coordinator removePersistentStore:originalStore error:outError];
success = success &&
[[self managedObjectContext] save:outError];
// restore original store
success = success &&
[coordinator removePersistentStore:tempStore error:outError];
success = success &&
[self configurePersistentStoreCoordinatorForURL:originalStoreURL ofType:inTypeName modelConfiguration:nil storeOptions:nil error:nil];
NSAutosaveElsewhereOperationについての私の現在の理解は、重複ではありません。ドキュメントがまだ場所を持っていない限り、自動保存の後に起こります。 現時点では、これが発生した2つの使用例があります。(1)まだ保存されていない新しい文書の後、(2)既存文書の複製後 – Stephan