我正试图实现writeSafelyToURL:ofType:forSaveOperation:error:在NSPersistentDocument的子类上。我必须处理NSAutosaveElsewhereOperation条件,这实际上是SQLite存储的重复操作。复制SQLite存储
下面的代码有一个问题,因为它创建了一个重复的商店,但商店实际上是空的,我不知道为什么。当我使用“恢复文档”选项时,我注意到了这个问题,但是当我尝试使用“重复”菜单项时变得很清楚。
基本上,我试图删除当前的商店,所以它不会被保存。然后,我添加临时存储,保存上下文,删除临时存储并添加原始存储。
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目前的理解是不(仅)重复。只要文档还没有位置,它就会在自动保存后发生。 我目前看到两个用例发生这种情况时(1)在未保存的新文档之后和(2)在现有文档的副本之后 – Stephan 2012-12-06 06:04:43