2015-05-10 3 views
3

Я использую CloudKit и хочу выполнить поиск записей на основе их строковых полей.CloudKit Неожиданное выражение для NSPredicate

Apple, документы говорят, что это способ сделать токенизированный поиска полей записи, то:

Чтобы выполнить поиск токенизированный полей записи, то используйте специальный сам оператор. Маркированный поиск выполняет поиск по любым полям, в которых включен полнотекстовый поиск, по умолчанию это все строковые поля. В листинге 5 показан пример, который ищет поля записи для токенов-строк bob и smith. Каждое отдельное слово рассматривается как отдельный токен для поиска. Сравнения нечувствительны к регистру и диакритике. Эти строки токенов могут быть найдены в одном поле или в нескольких полях, но все токены должны присутствовать в записи, чтобы это считалось совпадением.

Листинг 5: Matching поле, содержащее лексического снабжать струной, тетивой и т.п.

NSPredicate predicate = nil; 
predicate = [NSPredicate predicateWithFormat:@"self contains 'bob smith'"]; 

Когда я ввожу эту точную строку для предиката, я получаю исключение.

Код:

predicate = [NSPredicate predicateWithFormat:@"self contains 'bob smith'"]; 
query = [[CKQuery alloc] initWithRecordType:kCKRecord_Level predicate:predicate]; 

Исключение:

*** Terminating app due to uncaught exception 'CKException', reason: 'Unexpected expression: SELF CONTAINS "bob smith"' 

Любые идеи, что может быть не так? Кто-нибудь имел успех с этой предикатной строкой и CloudKit?

https://developer.apple.com/library/prerelease/ios/documentation/CloudKit/Reference/CKQuery_class/index.html

ответ

3

Похоже, что «само содержит» больше не работает. Вы по-прежнему выполняете токенизированный поиск с использованием этого предиката:

NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", "bob smith") 
Смежные вопросы