2011-05-25 82 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