【问题标题】:Crash in CoreData while saving data in from a backgroundthread从后台线程保存数据时核心数据崩溃
【发布时间】:2012-07-25 07:12:58
【问题描述】:

我有一个在后台线程中运行的 http 请求。数据一到,我就尝试将其保存到 coredata 中,但它在许多点上随机崩溃,并出现 EXC_BAD_ACCESS 错误。有人能给我指出正确的方向吗?

【问题讨论】:

  • 请发布准确的错误信息。到目前为止,我们唯一能告诉您的是:这可能是您代码中的内存管理问题。
  • EXC_BAD_ACCESS(code= 2, address = 0x3423234) 仅当我的后台请求尝试将数据保存在 coredata 中时,我才收到此错误
  • 通常会有一些文字围绕它。你也可以发一下吗?
  • __NSArrayM release]: 消息发送到已释放实例 0x859d5c0 此文本出现在控制台上..

标签: objective-c ios core-data ios4 core-data-migration


【解决方案1】:

您正在正确地释放一个已经释放的数组。尝试启用 NSZombie 或检查您是否在使用 alloc 关键字创建的数组上调用 release

【讨论】:

  • 崩溃是相当随机的,这通常发生在我尝试从作为后台线程运行的请求中将数据保存在核心数据中时。
  • 也可能是您缺少保留。也许你可以发布你的完整代码? (自动释放对象,提前释放)
  • - (void)parseServiceResponse:(NSDictionary *)rawJSONData { // 清除 jsonData 以防后续调用 [self setJsonData:nil]; [[CoreDataUtility sharedInstance] deleteAllObjectsForEntity:@"abcdata"]; if (rawJSONData && [rawJSONData count]) { for (NSDictionary *bulk in rawJSONData) { dispatch_async(dispatch_get_main_queue(),^ { [Summary addSummaryData:bulk]; } );我已经编写了一些将数据保存在 coredata 中的例程
  • 我怀疑这是后台线程的问题,因为我试图在主线程中保存数据。我不确定这个实现是否正确?
  • 我认为你的问题在于你的 rawJsonData。尝试调用 [rawJSONData retain];就在你的 for 循环之前。注意:这种方法会导致 rawJSONData 泄漏,只能用于测试这是否真的是问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多