我有一个带有Task和List的Core Data模型,其中List与Task有许多有序的关系,而Task与List有着倒数的关系。我需要以正确的顺序从给定列表中检索任务,但过滤以匹配谓词。例如,如果priority
是任务上的字段,
NSPredicate* predicate = [NSPredicate predicateWithString:@"priority == HIGH"]
List* list; // already fetched
我可以通过
完成它NSArray* allTasks = list.tasks;
NSArray* someTasks = [allTasks filteredArrayUsingPredicate:predicate];
但这需要将所有任务都拉入内存。我可以直接获取任务
NSFetchRequest* req = [[NSFetchRequest alloc] initWithEntityName:@"Task"];
[req setPredicate:[NSPredicate predicateWithFormat:@"list == %@ AND priority == HIGH", list]];
NSArray* someTasks = [context executeFetchRequest:req error:&error];
但随后不会保留任务顺序。
有没有办法通过谓词过滤关系错误?
答案 0 :(得分:0)
除非您使用有序关系,否则Task
实体不会以任何特定顺序返回,除非您对NSFetchRequest
进行排序。
我建议在NSFetchRequest
中添加一个排序,然后根据您给出的任务顺序排序。然后他们会以一致的顺序回来。
另外,从不将nil
传递给error:
参数。这只会隐藏未来的潜在错误。
答案 1 :(得分:0)
我认为以下方法可行,但效率非常低:
Tasks
,确保获取请求的returnsObjectsAsFaults
属性设置为true。list.tasks
)。这样,谓词在商店中进行评估,而不会导致任务失误,而订单仍由有序关系决定。