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

时间:2012-04-09 19:02:20

标签: ios core-data

我有一个异常断点集,当我打电话时 - (void)saveToURL:(NSURL *)url forSaveOperation:(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

在我的控制台登录组织者中,我看到了:

  

Apr 9 12:45:47不知名地区[232] :(错误)   com.apple.UIKit.UIDocument:   document:fileURL:   文件://本地主机的/ var /移动/应用/ F1A7026C-5ADD-4FAF-9C8C-887514F6EACA /文档/ PLDB /   documentState:[Normal]命中写入错误:错误   Domain = NSCocoaErrorDomain Code = 134030“操作无法-b-e-e   -c-O-M-P-L-E-T-E-D-。 - ( - Cocoa -error -1-3-4-0-3-0 -.-) - “-UserInfo - = - 0-x-5-c-1-6-8-0 - { - NSAffectedStoresError-Key - = - (^ J - “ - < -NSSQLCore-: - 0-x-5-b-2-7-4-0-> - ( - URL-: - file - : - / - / - localhost - / - VAR - / - 移动 - / - 应用 - / - F-1-A-7-0-2-6-C --- 5-ADD --- 4-FAF --- 9-C-8 -C --- 8-8-7-5-1-4-F-6-EACA - / - 文档 - / - PLDB - / - StoreContent - / - persistentStore - ) - “^ J - ) - , - NSUnderlyingError - = - 0-x-5-e-8-0-2-0 - “ - -operation -could-n'-t -be -completed-。 - ( - Cocoa -error -4 -.-) - “ - , - NSFilePath - = - / - var - / - mobile - / - Applications - / - F-1-A-7-0-2-6-C --- 5-ADD --- 4-FAF --- 9-C-8-C --- 8-8-7-5-1-4-F-6-EACA - / - 文档 - / - PLDB - / - StoreContent - / - persistentStore-} 4月9日12:45:47未知区[232] :(错误)   com.apple.UIKit.UIDocument:UIDocument无法恢复   描述错误:操作无法-b-e-e   -c-O-M-P-L-E-T-E-D-。 - ( - Cocoa -error -1-3-4-0-3-0 -.-)-reason-: - ( - null-)4月9日12:45:47未知区[232] :(错误)com。 apple.UIKit.UIDocument:无法从描述错误中恢复:操作无法完成   -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 -.-)-r-e-a-s-o-n-: - ( - n-u-l-l - )

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

1 个答案:

答案 0 :(得分:1)

我听说过使用UIManagedDocument保存核心数据的不同意见。有些人说除了第一次创建文档时,不要调用saveToUrl ...但是,我记得从斯坦福iOS课程中学习saveToUrl ...当你明确想要保存时可以调用。有人说要用

[document updateChangeCount:UIDocumentChangeDone]

通知需要保存的核心数据。有人说它会在自己的时间里拯救自己。有人说你可以使用[context obtainPermanentIDsForObjects:...]像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 ..调用,事情看起来效果越来越好。如果由于某种原因必须保存文档,请尝试以前的方法之一。