我在多线程 iOS 应用程序中使用 CoreData,一切似乎都运行良好 - 除非我在 XCode 中打开异常断点。每当我做一些 CoreData 工作时,断点会在 NSManagedObjectContext
上的 save:
-method 处停止 - 但之后 NSError 为零。我的日志中也没有任何内容(除了:Catchpoint 2(抛出异常)。
),应用程序没有崩溃……所以很难判断出了什么问题。
我唯一的线索是我的 NSManagedObjectContext
中的 updatedObjects:
中有一个对象 - 但它似乎没有任何问题。
我的问题与 this question on stackoverflow 非常相似,但那里唯一的答案对我没有帮助;我很确定我已经涵盖了所有内容。
这里可能有什么问题?或者是否有其他可能获取一些错误信息?
非常感谢!
编辑:显示代码非常困难。我正在使用 objectID 加载对象,编辑它们并将它们存储在分配给当前线程的上下文中。我已经检查过了——当前线程的上下文总是正确的;每个线程都有自己的上下文,这不应该是问题。如果只有有人可以告诉我如何从该错误/异常中获取更多信息,或者我毕竟必须关心它,那将会很有帮助。在我看来,好像异常是在“保存”方法中捕获的,所以它可能是“正常”行为?
最佳答案
这是正常行为。 CoreData 在其某些程序流内部使用异常抛出和处理。我和 CoreData 的人谈过这个问题。这可能看起来很奇怪,但这是他们很久以前做出的设计决定。
当您遇到异常时,请确保在您调用 -[NSManagedObjectContext save:]
和引发异常之间的回溯中没有任何代码。调用 -save:
很可能会回调您的代码,例如如果您正在观察 NSManagedObjectContextObjectsDidChangeNotification
,并且如果您在处理这些通知时做错了事,那么显然您有错。
如果您正在退出 -save:
方法,并且返回值为 YES
,则一切正常。
请注意,您应该检查返回值,不要使用 error != nil
来检查错误。正确的检查是:
NSError *error = nil;
BOOL success = [moc save:&error];
if (!success) {
// do error handling here.
}
关于objective-c - NSManagedObjectContext : exception breakpoint stops at save: method, 但没有日志/崩溃/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337635/