【问题标题】:Core Data swallowing uncaught exception核心数据吞没未捕获的异常
【发布时间】:2013-01-26 21:03:13
【问题描述】:

我遇到了一个令人不安/莫名其妙的错误。 Core Data 似乎正在吞噬自己的例外!在使用(超级有用的)CoreDataHelper 时,我编写了一个格式错误的 fetch,导致“未实现的谓词 SQL 生成”异常。这部分很简单,真正奇怪的是,这个异常在某处被捕获并吞下,这意味着我的代码在获取之后跳过了该方法的其余部分并返回到主循环,没有任何控制台消息。真是气死人了。

最终我能够将实际的 fetch 请求包装在 @try 语句中并 @catch 异常:

@try{
fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
    NSLog(@"fetch successful");
}
@catch (NSException* exception) {
    NSLog(@"caught exception!\n\n%@\n\n%@\n\n%@",[exception name], [exception reason], [exception userInfo]);
}

这让我弄清楚它是什么,但它仍然毫无意义会在某个地方被抓住。除了测试这个,我没有在我的代码中使用过@try/@catch anywhere

我还尝试创建一个空白的 Core Data 项目并使用没有 @try/@catch 语句的 CoreDataHelper 来尝试隔离问题,项目中没有其他任何内容,CoreDataHelper 可以正常工作,返回:

CoreDataTest[1044:11603] *** Terminating app due to uncaught exception   'NSInvalidArgumentException', reason: 'Unimplemented SQL generation for predicate ("test" LIKE attribute)'

所以我的项目中的某些东西正在捕获并忽略此异常,但不是我,除非我可以在不使用@catch 的情况下以某种方式做到这一点。

会是什么?!

【问题讨论】:

  • 你能发布完整的代码吗?我相信您在这里有一个谓词,这会导致问题。只是一个外部想法,在谓词中对不属于核心数据的变量使用“喜欢”。
  • 哦,我知道问题出在我的谓词格式上,我真正的问题是“为什么除非我自己明确地捕获它,否则这个异常会被捕获和忽略?”
  • 当异常发生并被吞下时,您是否会在控制台中收到“NSRunLoop ignoring exception ...”消息?我找不到任何 Apple 提供的关于 NSRunLoop 异常行为的实际文档,但在 stackoverflow.com/questions/4648952/objective-c-exceptions 问题上接受的答案表明这种情况在某些情况下很常见。
  • 不,控制台中没有消息,除非我自己@catch 异常。也许我错过了一个设置?
  • 这是发生在 GCD 块还是后台线程中?异常会被主线程吞没吗?

标签: ios exception core-data


【解决方案1】:

知道了!

我正在使用具有自己的库的外部附件(Linea Pro-4 条形码扫描仪/MSR),这就是捕获异常的原因,即使在其最新版本的框架中也是如此。

我在运行相同的获取请求之前设置了我的空白测试项目以连接到附件,然后砰!吞下异常!

【讨论】:

  • 更新:我向制造商报告了这个错误,但我没有收到任何回复。希望他们认真对待并保持安静。
  • 理想情况下,库应该重新抛出异常。
猜你喜欢
  • 2013-02-18
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多