按属性IN数组过滤核心数据结果

时间:2011-05-25 21:01:40

标签: objective-c cocoa ios core-data nspredicate

我目前有核心数据成功返回标题为Event的特定实体的所有结果:

NSManagedObjectContext *context = [delegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event" 
                                                     inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];

NSError *error;
NSArray *fetchResults = [context executeFetchRequest:request error:&error];

Event实体的一个属性是标题为tid的字符串。我还有一个包含所有允许的tid值的数组filterArray

如何让我的Core Data请求只返回tid属性与filterArray中某个值匹配的事件?我相信答案与NSPredicate相关,但我还不熟悉它,还没有达到我的意愿。

1 个答案:

答案 0 :(得分:59)

试试这个:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tid IN %@", filterArray];

[request setPredicate:predicate];

查看Aggregate Operations中的Predicate Programming Guide

修改

看看NSPredicate iPhone 3.2 SDK Core Data “IN clause” NSInvalidArgumentException exception。你有同样的错误。问题是列/属性名称中的拼写错误。语法应该没问题,它不能只找到tid