AutoSavesinplace导致新文档保存失败



我有一个基于NsperSistentDocument的应用程序,该应用程序将autosavesInPlace设置为返回YES,返回NO,而问题消失了。

  • 我创建一个新文档
  • 进行一些更改
  • 保存它,因此运行 NSSaveAsOperation,文档的名称和URL的变化,一切似乎都很好,但是下一个保存将抛出一个非常描述的

NSPersistentStoreSaveError = 134030, // unclassified save error - something we depend on returned an error

这仅在文档试图在NSSaveAsOperation之后运行保存时才发生。任何其他保存类型都可以像对现有文档的更改一样正常工作。有趣的效果是,如果我不更改名称或位置,我也不会遇到此问题。

我得到了

的异常回溯

帧#0:0x00007FFF988143C5 libobjc.a.dylib objc_exception_throw frame #1: 0x00007fff94c5f5f9 CoreData- [nspersistentstore(_nsinternalmethods)_preflightCrosscheck] 697 帧#2:0x00007FFF94C3198B COREDATA -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 603 frame #3: 0x00007fff94c5aa98 CoreData- [NSMANAGEDOBJECTCONTEXT SAVE:] 456 帧#4:0x00007fff91baa101 AppKit -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 3743 frame #5: 0x0000000100002de7 ZZZZ- [zzzzdocument writeTourl:oftype:forsaveoperation:oiltercontentsurl:errory:rorror:] 135在zzzzdocument.m:209 帧#6:0x00007fff91baabc7 AppKit -[NSPersistentDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 611 frame #7: 0x0000000100002ea3 ZZZZ- [zzzzdocument writesafelyTourl:oftype:forsaveoperation:erry:error:] 115在zzzzdocument.m:223

有什么想法?

不可能使用未包装的核心数据文件

如果您尝试捕获NSSaveAsOperation并在持久商店中进行迁移,以枚举...-journal文件的构建将无法创建为其外部砂箱。

-(void)saveToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation completionHandler:(void (^)(NSError *))completionHandler
{
    NSLog(@" save op = %ld to %@ ",saveOperation,url);
    NSURL *targeturl = url;
    if(saveOperation == NSSaveAsOperation)
    {
        //migrate pstore
        NSPersistentStore *store = [self.managedObjectContext.persistentStoreCoordinator.persistentStores lastObject];
        if (store)
        {
            NSMutableDictionary *opts = [NSMutableDictionary dictionary];
            [opts setValue:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
            [opts setValue:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
            NSError *error = NULL;
            NSPersistentStore *newstore =  [self.managedObjectContext.persistentStoreCoordinator migratePersistentStore:store toURL:url options:opts withType:store.type error:&error];
            if(newstore == nil)
            {
                NSLog(@"migration error %@",[error localizedDescription]);
            }
            self.fileURL = url;

        }

    }
    [super saveToURL:targeturl ofType:typeName forSaveOperation:saveOperation completionHandler:completionHandler];
}

因此,我们需要在使用NSPersistentDocument Framework的捆绑/文件夹中包装文件。

等待 NSManagedDocument(这是一个希望很好的API)

相关内容

  • 没有找到相关文章

最新更新