簡體   English   中英

iOS / Objective-C:NSPredicate超出范圍錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM