我正在尝试将外部数据添加到SQLite中/使用Core Data更新现有数据。

基本上,我从外部Web服务获得了JSON,并且正在使用以下代码来查找是否应该在数据库中添加新对象或更新现有对象。

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"name" inManagedObjectContext:context]];
[fetch setPredicate:[NSPredicate predicateWithFormat:@"id = %@", [data valueForKey:@"key"]]];
NSArray *results = [context executeFetchRequest:fetch error:nil];

if (results.count == 1)
{
    // update existing
}
else
{
    // add new
}

问题是:有时此代码导致异常:
Thread 1: EXC_??? (11) (code=0, subcode=0x0)
NSManagedObjectContext executeFetchRequest:error:中引发了异常

如果我继续执行我的应用程序,一切似乎正常。

我应该担心这个例外吗?

我的意思是拥有它有点烦人,但更重要的是要知道此异常的原因和后果是什么?

一些其他详细信息(以防万一,它是相关的):

上面的
  • 代码在一个循环中被执行了多次(大约25万次)。
  • 代码在主线程上运行(是的,我知道,但这是一种原型)。
  • 上下文是在主线程上创建的。
  • 在后台线程
  • 中创建外部数据

    [编辑] 一些更多详细信息:
  • executeFetchRequest:error即使在引发异常时也返回初始化的数组。
  • 当我将error参数提供给executeFetchRequest:error
  • 时,没有错误设置

    最佳答案

    那不安全。

    您应该检查方法的返回值,以确保已将数组退还给您

    NSArray *results = [context executeFetchRequest:fetch error:nil];
    if (!results) {
        // An error occurred you should probably use the out error
    }
    

    另外,CoreData似乎在内部抛出异常,但可以处理它们,因此,如果您设置了异常断点,则很有可能会从CoreData堆栈中随机捕获它们-我是说,根据过去的经验,这不确定是否在任何地方都有记载,但是在此视频中提到Debugging Tips - Mike Hay

    关于ios - EXC _ ???在执行executeFetchRequest时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14812611/

    10-11 16:54