1

助けてくれたすべての人に感謝します。投稿に関してはスタックオーバーフローが初めてなので、編集が面倒な場合はお詫び申し上げます。以下のコードは私が最終的に思いついたものであり、他の人を助けるかもしれないと思いますが、最後に答えた人も同様の結果をもたらす可能性があると思います.

私はしばらく探していましたが、これを分解して、ずさんな if ステートメントをいくつか使用して実行できると確信していますが、一般的で効率的な方法を探しています。

典型的な文字列比較による検索があります。を使用して配列内の各文字列に対して を使用してNSRangeいますが、そこから得られる結果はうるさい場合があります。

たとえば、文字列がある場合Bat Man、検索することで見つけることができますがBat、forManに追加することはできませmん。batBatm

私が探しているのは、文字が文字列内に存在し、正確にその文字列ではない場合です。

     -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{


[roomsList removeAllObjects];
stringScore = 0;


// clear
if([searchText length] == 0){

    searchingRooms = NO;

    [roomsList addObjectsFromArray:[newDataManager shared].rooms];
    [self.gsgSearchBar resignFirstResponder];

    // search users
}else{



    searchingRooms = YES;

  for(QBChatRoom *room in [newDataManager shared].rooms){
      stringScore = 0;
      NSString*   newRoomNameText = [room.name stringByReplacingOccurrencesOfString:@"_" withString:@""];

      NSString* newSearchText = [searchText stringByReplacingOccurrencesOfString:@" " withString:@""];




      for(int i = 0 ;i<[newSearchText length]; i++) {
          char mySearchChar = [newSearchText characterAtIndex:i];

          lastSearchString = [NSString stringWithFormat:@"%c",mySearchChar];

          NSRange searchRange = [newRoomNameText rangeOfString:lastSearchString options:NSCaseInsensitiveSearch];
          if (searchRange.location != NSNotFound){
              stringScore = stringScore + 1;
              if (stringScore == newSearchText.length) {
                  [roomsList addObject:room];

              }



          }}}}


[gsgTableView reloadData];
}
4

1 に答える 1