如何确定Core Data中一对多关系中的对象数

时间:2010-07-09 03:09:09

标签: iphone objective-c core-data

所以,我在CoreData中有一对多公司与员工的关系(在iOS上使用SQLite后端,如果相关的话)。我想创建一个谓词,只返回有0个与之关联的员工的公司。我可以通过 all 公司并迭代它们来做到这一点,但那会(我假设)慢得多。

有什么想法吗?

谢谢,
-Aaron

2 个答案:

答案 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...
}