1

予約語、具体的にはORandANDを?に置き換えることは可能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しかし、これは個別に作成せずに実行できるのではないかと思いました。

4

2 に答える 2

1

はい、次のことができます。

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];
}
于 2011-12-26T20:32:10.997 に答える
0

検索バーのテキストを使用して、データをフィルタリングしています。

以下のコードは簡単で、説明は不要です

NSString *predFormat=[NSString stringWithFormat:@"FirstName CONTAINS[c] '%@' OR LastName CONTAINS[c] '%@' OR Phone CONTAINS[c] '%@'",searchValue,searchValue,searchValue]; //お気に入り

NSPredicate *predicate = [NSPredicate predicateWithFormat:predFormat];

NSArray *tempData = [arrayfilteredArrayUsingPredicate:predicate];

これがうまくいくことを願っています..幸せなコーディング....

于 2013-07-25T10:07:05.777 に答える