我正在使用此代码在我的tableview中搜索:
for (Actor *actorz in arr)
{
NSComparisonResult result = [actorz.actorNaam compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:[actorz.actorNaam rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]];
if (result == NSOrderedSame)
{
[self.filteredListContent addObject:actorz];
}
}
现在我想知道如何不仅可以将searchText与actorz.actorNaam进行比较,还可以将其与actorz.actorBeschrijving进行比较?所以我想将searchText与两个字符串进行比较..
答案 0 :(得分:5)
NSString
的搜索方法会返回NSRange
,如果找不到字符串,则位置设置为NSNotFound
。
因此,您可以通过验证结果位置不 NSNotFound
来检查是否找到了字符串。它可能听起来有点倒退,但逻辑是坚实的(两个否定,可以这么说)。
NSRange nameResult = [actorz.actorNaam rangeOfString:searchText options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch];
NSRange descrResult = [actorz.actorBeschrijving rangeOfString:searchText options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch];
if ( nameResult.location != NSNotFound || descrResult.location != NSNotFound ) {
[self.filteredListContent addObject:actorz];
}
请注意,此代码段将查找包含搜索字符串的名称,而不仅仅是名称相等。您可能希望使用原始代码更改它。你当然不得不放弃nameResult,因为它是多余的:
NSComparisonResult result = [actorz.actorNaam compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:[actorz.actorNaam rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]];
NSRange descrResult = [actorz.actorBeschrijving rangeOfString:searchText options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch];
if ( result == NSOrderedSame || descrResult.location != NSNotFound ) {
[self.filteredListContent addObject:actorz];
}
然而,有一种更简单的方法。考虑使用谓词:
NSPredicate *actorPred = [NSPredicate predicateWithFormat:@"actorNaam contains[cd] %@ OR actorBeschrijving contains[cd] %@", searchText, searchText];
self.filteredListContent = [arr filteredArrayUsingPredicate:actorPred];
答案 1 :(得分:0)
我不完全确定你为什么要进行比较,我觉得检查你正在搜索的字符串中是否存在搜索文本似乎更有意义。如果这种方法适合你,你可以尝试一下:
NSArray *toCompareTo = @[actorz.actorNaam, actorz.actorBeschrijving];
[toCompareTo enumerateObjectsUsingBlock:^(NSString *object, NSUinteger index, BOOL *stop) {
if ([object rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)].location != NSNotFound) {
[self.filteredListContent addObject:object];
*stop = YES;
}}];