Ios 使用UIManagedDocument保存核心数据时出错

Ios 使用UIManagedDocument保存核心数据时出错,ios,core-data,Ios,Core Data,我设置了一个异常断点,当我调用 -(void)saveToURL:(NSURL*)saveOperation的url:(UIDocumentSaveOperation)saveOperation completionHandler:(void(^)(BOOL success))completionHandler 在我的UIManagedDocument中,有时会出现以下错误: * thread #3: tid = 0x2003, 0x357a8238 libobjc.A.dylib`objc_e

我设置了一个异常断点,当我调用 -(void)saveToURL:(NSURL*)saveOperation的url:(UIDocumentSaveOperation)saveOperation completionHandler:(void(^)(BOOL success))completionHandler 在我的UIManagedDocument中,有时会出现以下错误:

* thread #3: tid = 0x2003, 0x357a8238 libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 1.1
    frame #0: 0x357a8238 libobjc.A.dylib`objc_exception_throw
    frame #1: 0x3154a122 CoreData`-[NSPersistentStore(_NSInternalMethods) _preflightCrossCheck] + 758
    frame #2: 0x314bb296 CoreData`-[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 970
    frame #3: 0x31523286 CoreData`-[NSManagedObjectContext save:] + 522
    frame #4: 0x33d0ac5a UIKit`__84-[UIManagedDocument writeContents:toURL:forSaveOperation:originalContentsURL:error:]_block_invoke_0 + 30
    frame #5: 0x3152d3ee CoreData`developerSubmittedBlockToNSManagedObjectContextPerform + 74
    frame #6: 0x344fa7e6 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 26
    frame #7: 0x344fa646 libdispatch.dylib`dispatch_barrier_sync_f$VARIANT$mp + 62
在我的控制台登录管理器中,我看到:

四月九日12:45:47未知地区[232]:(错误) com.apple.UIKit.ui文档: 文档:fileURL: file://localhost/var/mobile/Applications/F1A7026C-5ADD-4FAF-9C8C-887514F6EACA/Documents/PLDB/ documentState:[正常]命中写入错误:错误 Domain=nscocaerorrordomain Code=134030“该操作无法执行”-t-b-e -c-o-m-p-l-e-t-e-d-(-c-o-c-o-a-e-r-r-o-r-1-3-4-0-3-0-)-“-U-s-e-r-I-n-f-o-=-0-x-5-c-1-6-8-0-{-n-s-a-f-e-c-t-e-d-s-t-o-r-r-r-K-e-y-”()-(2)c-b-D-D D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-4-D-D-D-D-4-f-f-f-f-a-f-f-f-a-f-a-f-a-f-a-a-D-D-D-D-D-D-D-4-D-f-f-f-f-a-f-a-a-f-a-f-a-f-f-a-f-f-f-f-a-f-f-a-f-f-a-f-f-f-f-a-f-f-a-f-f-f-f-a-f-f-f-a-f-f-f-a-f-a-f-a-f-a-f-f-f-f-f-f-f-f-f-f-a-a-f-f-a-a-a t-o-R-e-c-o-n-t-e-n-t-/-p-e-R-s-s-t-e-n-t-s-t-o-R-e-“^J-”,-n-s-U-n-D-e-R-L-y-i-n-g-e-R-R-o-R-=-0-x-5-e-8-0-2-0-“T-T-T-T-T-T-T-T-T-T-T-T-T-T-b-b-e-e-c-T-T-T-T-T-T-T-T-T-T-c-T-T-T-T-T-T-T-T-e-e-e-T-T-T-T-T-T-T-c-T-T-T-c-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-e-T-T-T-T-e-T-T-T-T-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-T-T-e-e-e-e-e-e-e-e-e-d--4-F-a-F--9-c-8-c--8-8-7-5-1-4-F-6-e-a-c-a-/-d-o-c-u-m-e-n-T-S-/-p-l-d-b-/-S-T-o-r-e-c-o-n-T-/-p-e-r-S-i-S-T-e-T-T-T-T-S-o-r-e-}四月九日12:45:47未知地区[232]:(错误) com.apple.UIKit.UIDocument:UIDocument不可恢复 描述错误:操作无法执行“-t-b-e” -c-o-m-p-l-e-t-e-d-(-c-o-c-o-a-e-r-o-r-1-3-4-0-3-0-)-r-e-a-s-o-n-:-(-n-u-l-l-)4月9日12:45:47未知区域[232]:(错误)com.apple.UIKit.UIDocument:无法从错误中恢复,说明:操作无法执行“-t-b-e -c-o-m-p-l-e-t-e-d-(-c-o-c-o-a-e-r-r-r-r-1-3-4-0-3-0-)-r-e-a-s-o-n-:-(-n-u-l-l-)


它不是每次都会发生,所以可能是时间问题?它不会使我的程序崩溃,但会在我的异常断点处中断,并且成功值对于我的块来说是否定的。

对于使用UIManagedDocument保存核心数据,我听到了不同的意见。有些人说,除非你第一次创建文档,否则永远不要调用saveToUrl…但是,我emember从斯坦福iOS课程中学习到,当你明确想要保存时,可以调用saveToUrl。有些人说使用

[文档更新更改计数:UIDocumentChangeDone]

通知需要保存的核心数据。有人说它将在自己的时间保存自己。有人说您可以使用[context AcquisitePermanentsForObjects:…]如MSManagedObjectContext上的以下类别来解决临时ID问题:

- (BOOL)obtainPermanentIDsForInsertedObjects:(NSError **)error
{
    NSSet * inserts = [self insertedObjects];

    if ([inserts count] == 0) return YES;

    return  [self obtainPermanentIDsForObjects:[inserts allObjects]
                                         error:error];
}

我希望我知道答案,但我认为我的问题是我调用了saveToUrl…太多。我删除了除第一个调用以外的所有saveToUrl..调用,而且似乎工作得更好更快。如果出于某种原因必须保存文档,请尝试前面的一种方法。

解决了此问题吗?我也看到了此错误。有点。看看我刚刚发布的答案。