我遇到了一个令人不安/令人困惑的错误。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 。
我还尝试创建一个空白的 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 的情况下以某种方式做到这一点。
会是什么呢?!