2012-02-23 85 views
1

我正试图实现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]; 
+0

我NSAutosaveElsewhereOperation目前的理解是不(仅)重复。只要文档还没有位置,它就会在自动保存后发生。 我目前看到两个用例发生这种情况时(1)在未保存的新文档之后和(2)在现有文档的副本之后 – Stephan 2012-12-06 06:04:43

回答

0

因为您试图在应用程序文件夹中存储应用程序文件夹,而这恰好是只读文件夹。 我认为你应该切换到Documents文件夹。

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
+0

这绝对不是应用程序文件夹。我有一些打印类似/ private/var/folders/4z/7bzwcw5915g29x1363xhhfm40000gp/T/TemporaryItems的NSLog代码 inSaveOperation由AutoSave触发,所以我不选择位置。 – 2012-02-23 18:42:01