我正在尝试弄清楚如何连接属性名称。我有一个县和一个区属性,我想像这样查询:
[NSPredicate predicateWithFormat:@"county + district contains[cd] %@",searchBar.text]
我遇到了“未实现SQL生成谓词错误”的问题,而且我不确定如何实现NSPredicate。
我正在尝试弄清楚如何连接属性名称。我有一个县和一个区属性,我想像这样查询:
[NSPredicate predicateWithFormat:@"county + district contains[cd] %@",searchBar.text]
我遇到了“未实现SQL生成谓词错误”的问题,而且我不确定如何实现NSPredicate。
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:在您的Core Data应用程序中添加类似iTunes的搜索功能,了解更多解释。
最终我把两个变量(区域+国家)合并成一个字段,并在该字段上执行查询。
我做了类似的事情,并得出结论,像 cekisakurek 一样,最好的方法是将字段连接成一个公共字段(对于名字和姓氏更为相关)。
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
然后使用“contains [cd]”过滤此字段
[NSPredicate predicateWithFormat:@"fullName contains[cd] %@", self.searchBar.text];
[NSPredicate predicateWithFormat:@"county contains[cd] %@ AND district contains[cd] %@",searchBar.text,searchBar.text];
只需尝试上述代码行,它将对您有所帮助。