2

我的问题与类似,但我需要进一步澄清。我经常在这样的代码中遇到异常:

NSError* error;
if (![managedObjectContext save:&error]) {
    NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
}

但是,当我在 中放置断点时objc_exception_throw,我可以发现抛出了异常save

(gdb) po [$eax name]
NSInternalInconsistencyException
(gdb) po [$eax description]
optimistic locking failure

我没想到会这样,因为文档说乐观锁定失败将返回错误,而不是异常。

顺便说一句,我什至无法@try ... @catch (NSException * e)在代码中捕捉到这个异常。这一切都很奇怪。

4

1 回答 1

2

我认为正在发生的事情是objc_exception_throw在 Core Data 中捕获内部异常,但它们并没有真正渗透到我的应用程序中。因为我设置了我的合并策略,锁定失败被转换为对象合并,一切都很好。

我可能也应该使用committedValuesForKeys:,这样我就可以在异常之前看到发生了什么......这不会每次都发生。

于 2010-01-08T15:42:00.017 回答