2011-05-25 50 views
24

我现在有核心数据成功返回所有结果的标题为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]; 

一个属性是名为tid一个字符串。我也有一个包含所有允许的tid值的数组filterArray

如何让我的核心数据请求仅返回具有与filterArray中的某个值相匹配的tid属性的事件?我相信答案与NSPredicate有关,但我对它还不是很熟悉,还没有让它屈服于我的意愿。

回答

52

试试这个:

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

[request setPredicate:predicate]; 

已经在Predicate Programming Guide看看Aggregate Operations

编辑

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

+0

感谢您的回复。我尝试了你的建议,但是我得到一个'NSInvalidArgumentException',原因是:'未实现的SQL生成谓词:(tid IN {1,2})''。任何想法在这一个? – markdorison 2011-05-25 23:23:03

+0

@markdorison添加了一个编辑,看看。 – 2011-05-26 07:18:34

+0

我可以使用NSPredicate * predicate = [NSPredicate predicateWithFormat:@“tid IN [c]%@”,filterArray];不区分大小写? – 2017-08-09 06:39:10