首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EXC_?执行executeFetchRequest时

EXC_?执行executeFetchRequest时
EN

Stack Overflow用户
提问于 2013-02-11 13:07:22
回答 1查看 484关注 0票数 1

我试图将外部数据添加到SQLite /使用Core更新现有数据。

基本上,我从外部web服务获得一个JSON,并且我使用下面的代码来确定我是应该在DB中添加新对象还是更新现有对象。

代码语言:javascript
复制
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
}

问题是:有时这段代码会导致异常:

代码语言:javascript
复制
Thread 1: EXC_??? (11) (code=0, subcode=0x0)

异常在NSManagedObjectContext executeFetchRequest:error:中引发。

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

我该担心这个例外吗?

我的意思是,这有点烦人,但更重要的是,知道什么是原因和后果的这一例外?

其他一些细节(以防万一是相关的):

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

编辑的更多细节:

  • 即使引发异常,executeFetchRequest:error也返回初始化的数组。
  • 当我向error提供executeFetchRequest:error参数时,没有错误集。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-11 15:38:51

那不安全。

您应该检查方法的返回,以确保返回了一个数组。

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

另外,CoreData似乎会在内部抛出异常,但是会处理它们,所以如果您有一个异常断点集,它很可能会被CoreData堆栈中的任意点捕获--我是从过去的经验中说的,不确定它是否在任何地方都有文档记录,但是在本视频调试技巧-迈克·海伊中已经提到了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14812611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档