设置关系时,核心数据存在问题:
在设置国家和地区之间的关系时,以下代码会随机崩溃。
如果我禁用第二个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"];
}
}
答案 0 :(得分:1)
我混淆了队列和线程。我创建了一个后台队列,在那里我使用了我的“背景上下文”...当然我在其中创建了几个线程,谁与上下文交互......所以......
顺便说一下:这篇优秀的文章最终为我澄清了这一点: (及时赶来:-) http://www.cimgf.com/2011/08/22/importing-and-displaying-large-data-sets-in-core-data/答案 1 :(得分:0)
此错误消息可能与内存问题有关,关于使用(或释放)已经解除分配的对象。 您应该运行探查器来发现内存问题,或者在保存方法之后使用断点进行调试,然后逐行执行直到它崩溃。
猜测一下,如果您正在使用某种工厂方法创建或获取Regions对象,可能会在该方法执行过程中解除分配,有时例程在dealloc之前足够快,有时不会,这可以解释随机性。
尝试在开头保留Regions,在第二个循环结束时释放。