3

我遇到了一个问题,我确实解决了它,但我觉得它效率很低,这涉及遍历父/子引用的核心数据(iOS)实体层次结构来计算附加到某些实体的项目数量。

让我更具体一点。我有两种类型的实体:CategoryAttachment.

实体通过Category父/子引用链接。Categories附件以多对一的形式链接(一个类别的多个附件)。

如果我想计算属于给定层次结构的附件数量Category,有没有NSFetchRequest比这更有效的方法?

NSInteger count = 0;

NSMutableArray *stack = [[NSMutableArray alloc] init];
[stack addObject:targetCategory];

while([stack count] > 0)
{
    Category *current = [stack lastObject];
    [stack removeLastObject];

    count += current.attachments.count;

    for (Category *cat in current.children)
    {
        [stack addObject:cat];
    }
}

targetCategory是选择的根类别。

提前致谢。

4

2 回答 2

2

如果您只需要计算对象,请使用countForFetchRequest:error:如下:

NSError *err = nil;
NSUInteger count = [moc countForFetchRequest:request error:&err];
if(count == NSNotFound) {
  // Handle error
}

显然,@MartinR 的建议仍然有效。

于 2013-02-18T22:29:06.397 回答
0

(用“这是不可能的”来回答是有风险的,但是)我很确定没有递归地获取或计算对象的获取请求。您必须使用递归方法或按照您的方式遍历层次结构。

于 2013-02-18T12:36:38.417 回答