2011-12-19 13 views
1

ORANDの予約語をpredicateFormatに置き換えることはできますか?+ [NSPredicate predicateWithFormat]代替予約語

私が試した:

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を作成せずに行うことができる場合、私は思っていました。

答えて

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

。コードの下

シンプルではありませんし、任意の説明

NSStringの* predFormat = [NSStringのstringWithFormatの必要:姓は、[C]は '%@' が含まれているか、姓が[C]は '%@' や電話がCONTAINS CONTAINS "@ [c] '%@' "、searchValue、searchValue、searchValue]; // LIKE

NSPredicate * predicate = [NSPredicate predicateWithFormat:predFormat];

NSArray * tempData = [配列filteredArrayUsingPredicate:述語];

これはあなたのためにうまくいきます。 ハッピーコーディング....