计算实体层次结构中的项目

时间:2013-02-18 11:07:59

标签: ios core-data count hierarchy

我遇到了一个问题,我确实解决了它,但我觉得它效率非常低,这涉及遍历核心数据(针对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是选择的根类别。

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

(用“那是不可能的”回答是冒险的,但是)我很确定没有提取请求以递归方式提取或计数对象。您必须使用递归方法或您的方式遍历层次结构。