我试图弄清楚如何连接属性名称。我有一个我要查询的县和区属性,如
[NSPredicate predicateWithFormat:@"county + district contains[cd] %@",searchBar.text]
为我提供了未实现的SQL生成以用于谓词错误。我不确定如何实施NSPredicate。 感谢
答案 0 :(得分:7)
这可以让您了解如何进行更复杂的搜索。它将匹配“县区”,“区县”等的查询。
NSArray *searchTerms = [searchBar.text componentsSeparatedByString:@" "];
NSString *predicateFormat = @"(county contains[cd] %@) OR (district contains[cd] %@)";
NSPredicate *predicate;
if ([searchTerms count] == 1) {
NSString *term = [searchTerms objectAtIndex:0];
predicate = [NSPredicate predicateWithFormat:predicateFormat, term, term];
} else {
NSMutableArray *subPredicates = [NSMutableArray array];
for (NSString *term in searchTerms) {
NSPredicate *p = [NSPredicate predicateWithFormat:predicateFormat, term, term];
[subPredicates addObject:p];
}
predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
}
[fetchRequest setPredicate:predicate];
有关详细说明,请参阅Cocoa Is My Girlfriend: Adding iTunes-style search to your Core Data application。
答案 1 :(得分:3)
我最终将另一个字段实现为连接两个变量(区域+国家/地区)并对该变量执行查询。
答案 2 :(得分:1)
我做了类似的事情并得出结论,像cekisakurek一样,最好的方法是将字段连接到一个公共字段(与名字/姓氏更相关)
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
然后使用'contains [cd]'
在此字段上过滤[NSPredicate predicateWithFormat:@"fullName contains[cd] %@", self.searchBar.text];
答案 3 :(得分:0)
[NSPredicate predicateWithFormat:@"county contains[cd] %@ AND district contains[cd] %@",searchBar.text,searchBar.text];
试试上面的代码行,它会对你有帮助。