我的数据模型的一些背景信息:
manufacturer <-->> item <<-->> tag
我目前通过fetchrequest生成项目列表:
- (NSFetchRequest*) rankingRequestForItem:(Item*)item {
NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
NSPredicate* p = [NSPredicate predicateWithFormat:@"SELF != %@",item.objectID];
r.resultType = NSDictionaryResultType;
r.resultType = NSDictionaryResultType;
r.propertiesToFetch = @[[self objectIDExpressionDescription],@"itemName",
[self rankingExpressionDescriptionForTags:[item mutableSetValueForKey:@"itemToTag"]]];
r.predicate = p;
r.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES]];
return r;
}
这将生成所有项目的列表。我想为与特定制造商有关系的商品过滤它。因此,我在所有项目列表之后添加一个谓词,并按selectedManufacturer对其进行排序。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemToMa = %@", selectedManufacturer];
这可行,但是要抓取很多将被过滤掉的项目。对于大数据集,我认为随着搜索所有项目而不仅仅是与一个制造商关联的项目,它会变得越来越慢。我想过滤初始“ rankingRequestForItem”方法中的项目。
是否可以将上述谓词与顶部谓词一起移动并创建复合谓词?
我不会担心性能。Core Data可以很好地管理这一点。有时,谓词的顺序很重要,因此也许将制造商过滤器放在第一位。
您可以按照问题注释中的建议将谓词组合为一个,也可以使用复合谓词-结果几乎相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句