2014-12-02 59 views
0

我有兩個數組,我必須做通配符搜索,我使用IN運算符,但IN運算符給我完全匹配,但我想獲取所有包含searchTerm。這是可能的通過IN運算符,或者我必須手動循環所有記錄並匹配選擇我想要的記錄。Coredata謂詞IN運算符與像或包含

目前代碼:

 NSArray *filteredArray = [brandsFabric filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.color_name IN %@ OR self.subcategory_name IN %@",colorNamesArray,patternNamesArray]]; 

所需的功能是這樣的:

 NSArray *filteredArray = [brandsFabric filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.color_name IN like/contains %@ OR self.subcategory_name IN like/contains %@",colorNamesArray,patternNamesArray]]; 

回答

1

這是一個非常昂貴的操作,但你可以試試:

NSMutableArray *predicates = [NSMutableArray array]; 
for (NSString *name in colorNames) { 
    [predicates addObject:[NSPredicate predicateWithFormat: 
     @"color_name CONTAINS[cd] %@", name]]; 
} 
for (NSString *name in subcategoryNames) { 
    [predicates addObject:[NSPredicate predicateWithFormat: 
     @"subcategory_name CONTAINS[cd] %@", name]]; 
} 
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:predicates]; 

甚至可能是一個子查詢。 (實驗)

[NSPredicate predicateWithFormat: 
    @"((SUBQUERY(%@, $x, color_name CONTAINS[cd] $x)[email protected] != 0) OR " 
    @"((SUBQUERY(%@, $x, category_name CONTAINS[cd] $x)[email protected] != 0)", 
    colorNames, categoryNames]; 
0

它是這樣的:CONTAINS[cd] %@代替IN

+0

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',理由是:「無法查找字符串值(( 黑色 ))(藍色);值不是字符串' – 2014-12-02 09:14:03

+0

我得到這個錯誤,因爲包含與集合不起作用,因爲我正在使用IN運算符的數組。 – 2014-12-02 09:14:42