从后台线程保存数据时核心数据崩溃

Posted

技术标签:

【中文标题】从后台线程保存数据时核心数据崩溃【英文标题】: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 此文本出现在控制台上.. 【参考方案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 泄漏,只能用于测试这是否真的是问题!

以上是关于从后台线程保存数据时核心数据崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在后台线程问题中将服务器数据保存到核心数据

删除核心数据对象并保存在后台线程中

核心数据和后台线程的问题

iOS/Objective-C:在后台线程中保存到核心数据

Core-Data 后台保存性能问题

延迟后在后台线程中处理核心数据