设置关系时的核心数据exc_bad_access

时间:2011-08-22 09:12:44

标签: iphone core-data

设置关系时,核心数据存在问题:

在设置国家和地区之间的关系时,以下代码会随机崩溃。

如果我禁用第二个for循环,则该方法完成且没有错误。 一切都发生在生活在后台线程的环境中。

再次说明:我可以毫无困难地为区域和国家创建对象,它们很容易出现在Simulators数据库中 - 但是当我尝试设置之间的关系时,应用程序会随机崩溃。

有什么想法吗?

for (Region* region in regions) {        
    // only store if region code isn't empty
    if (region.m_RegionCode != nil && [region.m_RegionCode length] > 0) { 
        NSManagedObject* cdRegion = [NSEntityDescription insertNewObjectForEntityForName:CDREGION inManagedObjectContext:self.objectContextBackground];
        [cdRegion setValue:region.m_RegionCode forKey:@"code"];
        [cdRegion setValue:region.m_regioncodedescription forKey:@"name"];            
    }            
}
[self saveBackgroundContext];
 for (Region* region in regions) {        
    if (region.m_RegionCode != nil && [region.m_RegionCode length] > 0) { 
        NSManagedObject* cdRegion = [self getManagedObject:CDREGION withCode:region.m_RegionCode];
        NSManagedObject* CDCountry = [self getManagedObject:CDCOUNTRY withCode:region.m_countrycode];
        [cdRegion setValue:CDCountry forKey:@"country"];

    }            
}

2 个答案:

答案 0 :(得分:1)

好吧 - 只是为了让你知道:它实际上是问题(我知道 - 它列在关于这个主题的所有页面之上:-)我在线程之间使用了一个上下文。

我混淆了队列和线程。我创建了一个后台队列,在那里我使用了我的“背景上下文”...当然我在其中创建了几个线程,谁与上下文交互......所以......

顺便说一下:这篇优秀的文章最终为我澄清了这一点: (及时赶来:-) http://www.cimgf.com/2011/08/22/importing-and-displaying-large-data-sets-in-core-data/

答案 1 :(得分:0)

此错误消息可能与内存问题有关,关于使用(或释放)已经解除分配的对象。 您应该运行探查器来发现内存问题,或者在保存方法之后使用断点进行调试,然后逐行执行直到它崩溃。

猜测一下,如果您正在使用某种工厂方法创建或获取Regions对象,可能会在该方法执行过程中解除分配,有时例程在dealloc之前足够快,有时不会,这可以解释随机性。

尝试在开头保留Regions,在第二个循环结束时释放。