[英]IOS/Objective-C: Out of Range Error with NSPredicate
我已經建立了一個與下面類似的NSPredicate,並且運行良好。 但是,這一次,它產生了錯誤:
'NSRangeException', reason: '-[NSTaggedPointerString characterAtIndex:]: Index 1 out of bounds; string length 1'
這是我建立謂詞的方式:
NSString *shortTitleClause = nil;
NSString *longTitleClause = nil;
編輯:
添加子句:
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)`
對我來說,目前尚不清楚tagdPointerString指的是什么。 誰能看到我為什么收到此錯誤?
准備謂詞時,不能使用stringWithFormat
替換%@值。 請改用predicateWithFormat
。 不要使用他們一起componentsJoinedByString
-使用NSCompoundPredicate
多個謂詞組合:
shortTitlePredicate = [NSPredicate predicateWithFormat:@"(shorttitle contains[c] %@)", searchText];
longTitlePredicate = [NSPredicate predicateWithFormat:@"(longtitle contains[c] %@)", searchText];
NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[shortTitlePredicate,longTitlePredicate]];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.