小编ndf*_*red的帖子

性能:核心数据关系在分配后出现故障

我有一个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服务,channelsprograms包含由Web服务标识符索引的故障通道和程序对象.断层发生在self.program = programself.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)

iphone entity-relationship core-data ios

6
推荐指数
1
解决办法
1630
查看次数

标签 统计

core-data ×1

entity-relationship ×1

ios ×1

iphone ×1