+ [NSPredicate ПредикатWithFormat] заменить зарезервированные слова - PullRequest
1 голос
/ 19 декабря 2011

Можно ли заменить зарезервированные слова, в частности OR и AND, на predicateFormat?

Я пытался:

NSString *andOr = (isAnd ? @"AND" : @"OR");  // isAnd is a BOOL variable
NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"firstName == %@ %K lastName == %@",
                          user.firstName, andOr, user.lastName];

Но я получил:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Unable to parse the format string "firstName == %@ %K lastName == %@"

Я попытался %s (а также %S) вместо %K, но получил то же исключение.

На данный момент мое рабочее решение - создать predicateFormat отдельно.

NSString *predicateFormat = [NSString stringWithFormat:
                             @"firstName == %%@ %@ lastName == %%@", andOr]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat,
                          user.firstName, user.lastName];

Но мне было интересно, можно ли это сделать без создания predicateFormat отдельно.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Да, это может:

NSPredicate *firstName = [NSPredicate predicateWithFormat:@"firstName == %@", [user firstName]];
NSPredicate *lastName = [NSPredicate predicateWithFormat:@"lastName == %@", [user lastName]];
NSArray *subpredicates = [NSArray arrayWithObjects:firstName, lastName, nil];

NSPredicate *predicate = nil;
if (isAnd) {
  predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];
} else {
  predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subpredicates];
}
0 голосов
/ 25 июля 2013

Используя текст строки поиска, я фильтрую данные.

Ниже приведен простой код, и нет необходимости в каких-либо объяснениях

NSString * predFormat = [NSString stringWithFormat: @ "FirstName CONTAINS [c]'% @' ИЛИ ​​ФАМИЛИЯ СОДЕРЖИТ [c] '% @' ИЛИ ​​Телефон СОДЕРЖИТ [c] '% @' ', searchValue, searchValue, searchValue];// LIKE

NSPredicate * предикат = [NSPredicate ultimateateWithFormat: predFormat];

NSArray * tempData = [массив FilterArrayUsingPredicate: предикат];

Надеюсь, это будет работать для вас. Счастливого кодирования ....

...