我遇到了一个问题,我确实解决了它,但我觉得它效率非常低,这涉及遍历核心数据(针对iOS)实体层次的父/子引用来计算附加到某些项目的数量实体。
让我更具体一点。我有两种类型的实体:Category
和Attachment
。
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
是选择的根类别。
提前致谢。
答案 0 :(得分:1)
如果您只需要计算对象,请使用countForFetchRequest:error:
,如下所示:
NSError *err = nil;
NSUInteger count = [moc countForFetchRequest:request error:&err];
if(count == NSNotFound) {
// Handle error
}
显然,@ MartinR的建议仍然有效。
答案 1 :(得分:0)
(用“那是不可能的”回答是冒险的,但是)我很确定没有提取请求以递归方式提取或计数对象。您必须使用递归方法或您的方式遍历层次结构。