所以,我在CoreData中有一对多公司与员工的关系(在iOS上使用SQLite后端,如果相关的话)。我想创建一个谓词,只返回有0个与之关联的员工的公司。我可以通过 all 公司并迭代它们来做到这一点,但那会(我假设)慢得多。
有什么想法吗?
谢谢,
-Aaron
答案 0 :(得分:2)
在尝试@falconcreek的回答并得到错误(在我对他的回答的评论中描述)后,我做了一些谷歌搜索,并确定答案是
NSPredicate *noEmployeesPredicate = [NSPredicate predicateWithFormat:@"employees.@count == 0"];
现在一切都很有效。谢谢!
答案 1 :(得分:1)
假设您的公司 - >员工关系被命名为“员工”
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Company" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
// the following doesn't work
// NSPredicate *noEmployeesPredicate = [NSPredicate predicateWithFormat:@"employees = nil OR employees[SIZE] = 0"];
// use @count instead
NSPredicate *noEmployeesPredicate = [NSPredicate predicateWithFormat:@"employees = nil OR employees.@count == 0"];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (error)
{
// Deal with error...
}