NSPredicate连接属性

时间:2011-09-12 09:01:32

标签: objective-c ios nspredicate

我试图弄清楚如何连接属性名称。我有一个我要查询的县和区属性,如

[NSPredicate predicateWithFormat:@"county + district contains[cd] %@",searchBar.text]

为我提供了未实现的SQL生成以用于谓词错误。我不确定如何实施NSPredicate。 感谢

4 个答案:

答案 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];

试试上面的代码行,它会对你有帮助。