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)`
我不清楚 taggedPointerString 指的是我什么。谁能看出我为什么会收到此错误?
您不能在准备谓词时使用 stringWithFormat
替换 %@ 值。请改用 predicateWithFormat
。并且不要使用 componentsJoinedByString
加入它们 - 使用 NSCompoundPredicate
组合多个谓词:
shortTitlePredicate = [NSPredicate predicateWithFormat:@"(shorttitle contains[c] %@)", searchText];
longTitlePredicate = [NSPredicate predicateWithFormat:@"(longtitle contains[c] %@)", searchText];
NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[shortTitlePredicate,longTitlePredicate]];
我已经构建了一个类似于下面的 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)`
我不清楚 taggedPointerString 指的是我什么。谁能看出我为什么会收到此错误?
您不能在准备谓词时使用 stringWithFormat
替换 %@ 值。请改用 predicateWithFormat
。并且不要使用 componentsJoinedByString
加入它们 - 使用 NSCompoundPredicate
组合多个谓词:
shortTitlePredicate = [NSPredicate predicateWithFormat:@"(shorttitle contains[c] %@)", searchText];
longTitlePredicate = [NSPredicate predicateWithFormat:@"(longtitle contains[c] %@)", searchText];
NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[shortTitlePredicate,longTitlePredicate]];