NSP предикатные объединяющие атрибуты - PullRequest
5 голосов
/ 12 сентября 2011

Я пытаюсь выяснить, как объединить имена атрибутов. У меня есть округ и атрибут района, который я хочу запросить, например

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

дает мне невыполненную генерацию SQL для ошибки предиката. и я не уверен, как реализовать NSPredicate. Спасибо

Ответы [ 4 ]

7 голосов
/ 29 сентября 2011

Это должно дать вам представление о том, как выполнить более сложный поиск. Он будет соответствовать запросам "округ округ", "округ округ" и т. Д.

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

См. Какао - моя подруга: добавьте поиск в стиле iTunes в ваше приложение Core Data для получения более подробных объяснений.

3 голосов
/ 17 июня 2013

В итоге я реализовал другое поле, объединив две переменные (район + страна) и выполнив запрос по этой переменной.

1 голос
/ 03 февраля 2014

Я сделал нечто похожее и пришел к выводу, что, как и cekisakurek, лучшим способом было объединить поля в общее поле (более подходящее для имени / фамилии)

- (NSString *)fullName {
    return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}

, а затем фильтруется в этом поле с помощью 'contains [cd]'

[NSPredicate predicateWithFormat:@"fullName contains[cd] %@", self.searchBar.text];
0 голосов
/ 20 сентября 2011
[NSPredicate predicateWithFormat:@"county contains[cd] %@ AND district contains[cd] %@",searchBar.text,searchBar.text];

Просто попробуйте приведенные выше строки кода, это поможет вам.

...