文字列が見つからない場合に位置が設定されたをNSString
返す検索メソッド。NSRange
NSNotFound
したがって、結果の場所がではない ことを確認することで、文字列が見つかったかどうかを確認できますNSNotFound
。少し逆に聞こえるかもしれませんが、論理はしっかりしています(いわば2つの否定)。
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];