我有一个Core Data模型代表iOS 4+上的电视指南,有3个类:
Channel (BBC 1)Program (最高档)Broadcast (周一晚上8点BBC 1的Top Gear)我有大约40个频道,8000个节目和6000个广播,我想微调导入过程,这样它不需要花一分钟才能运行.
导入频道和节目很容易,因为它们是独立的对象.然而,广播与频道和节目(1对多)有关系,并且频道和节目都与广播(多对1)具有反向关系.为了加快速度,我有一个故障通道的内存字典和只预取了Web服务标识符的程序:我创建一个广播并查看两个字典,以获得相应的通道和程序,而无需往返数据库.
但是当我将节目或频道分配给广播时,频道和节目的反向关系访问会立即触发两个对象的故障,导致大量减速(6000*2请求)和随之而来的内存压力,如核心数据故障所示仪器报告.我尝试broadcasts在两个频道和节目上预先获取关系,但这种关系仍然存在问题.
你知道为什么反向关系被访问并且他们的父母有错吗?保存关系时如何避免从数据库中读取?
更新:示例代码,我的Broadcast实例的分配/更新方法.该dictionary变量来自Web服务,channels并programs包含由Web服务标识符索引的故障通道和程序对象.断层发生在self.program = program和self.channel = channel线上.
- (BOOL)assignWithDictionary:(NSDictionary *)dictionary channels:(NSDictionary *)channels programs:(NSDictionary *)programs {
// Add channel relationship
NSNumber *channelIdentifier = [dictionary objectForKey:@"channel_id"];
if (self.channel == nil || ![self.channel.identifier isEqualToNumber:channelIdentifier]) {
Channel *channel = [channels objectForKey:channelIdentifier];
if (channel == nil) {
NSLog(@"Broadcast %@ has invalid channel: %@", identifier, channelIdentifier);
return NO; …Run Code Online (Sandbox Code Playgroud)