我试图将外部数据添加到SQLite /使用Core更新现有数据。
基本上,我从外部web服务获得一个JSON,并且我使用下面的代码来确定我是应该在DB中添加新对象还是更新现有对象。
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:中引发。
如果我继续执行我的应用程序,一切似乎都好。
我该担心这个例外吗?
我的意思是,这有点烦人,但更重要的是,知道什么是原因和后果的这一例外?
其他一些细节(以防万一是相关的):
编辑的更多细节:
executeFetchRequest:error也返回初始化的数组。error提供executeFetchRequest:error参数时,没有错误集。发布于 2013-02-11 15:38:51
那不安全。
您应该检查方法的返回,以确保返回了一个数组。
NSArray *results = [context executeFetchRequest:fetch error:nil];
if (!results) {
// An error occurred you should probably use the out error
}另外,CoreData似乎会在内部抛出异常,但是会处理它们,所以如果您有一个异常断点集,它很可能会被CoreData堆栈中的任意点捕获--我是从过去的经验中说的,不确定它是否在任何地方都有文档记录,但是在本视频调试技巧-迈克·海伊中已经提到了
https://stackoverflow.com/questions/14812611
复制相似问题