gpt4 book ai didi

objective-c - NSManagedObjectContext : exception breakpoint stops at save: method, 但没有日志/崩溃/错误

转载 作者:IT老高 更新时间:2023-10-28 11:36:17 25 4
gpt4 key购买 nike

我在多线程 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com