2017-01-31 1 views
0

이전과 비슷한 NSPredicate를 작성했으며 완벽하게 작동했습니다.IOS/Objective-C : NSPredicate의 범위를 벗어남 오류

NSString *shortTitleClause = nil; 
    NSString *longTitleClause = nil; 

편집 :

추가 조항 : 여기에

'NSRangeException', reason: '-[NSTaggedPointerString characterAtIndex:]: Index 1 out of bounds; string length 1' 

내가 술어를 구축하는 방법입니다 그러나,이 시간, 그것은 오류를 생성하는

shortTitleClause =[NSString stringWithFormat:@"(shorttitle contains[c] %@)", searchText]; 
longTitleClause =[NSString stringWithFormat:@"(longtitle contains[c] %@)", searchText]; 

// 내 실제 술어에는 더 많은 절이 있지만 몇 개라도 동일한 오류가 발생합니다.

NSMutableArray *predArr = [@[] mutableCopy]; 

    if (shortTitleClause.length > 0){ 
     [predArr addObject:shortTitleClause]; 
    } 
    if (longTitleClause.length > 0){ 
     [predArr addObject:longTitleClause]; 
    } 
NSString *predStr = [predArr componentsJoinedByString:@"||"]; 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:predStr]; 
    searchResults = [theBooks filteredArrayUsingPredicate:resultPredicate]; 

When searching for the letter 'S' the predicate logs as: `(shorttitle contains[c] S)||(longtitle contains[c] S)` 

taggedPointerString이 무엇을 말하고 있는지 분명하지 않습니다. 아무도 왜이 오류가 발생하는지 알 수 있습니까?

답변

1

술어를 준비 할 때 stringWithFormat을 사용하여 % @ 값을 바꿀 수 없습니다. 대신 predicateWithFormat을 사용하십시오. 그리고 componentsJoinedByString을 사용하여 이들을 합류하지 마십시오. 복수의 조건자를 결합하기 위해 NSCompoundPredicate을 사용하십시오 :

관련 문제