2011-12-19 4 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을 별도로 생성하는 것입니다. 이 별도로 predicateFormat을 만들지 않고 할 수 있다면

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

, 나는 궁금했다.

답변

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의 필요가 없습니다 수 있습니다 : FIRSTNAME는 [C] '% 1 @'를 포함하거나 성 포함 된 "@ [C는 '% 1 @'또는 전화 CONTAINS] [c] '% @' ", searchValue, searchValue, searchValue]; // 좋아요

NSPredicate * predicate = [NSPredicate predicateWithFormat : predFormat];

NSArray * tempData = [array filteredArrayUsingPredicate : predicate];

희망이 있습니다 .. 해피 코딩 ....