0

は、簡単な方法でこれを起こる、私のコードでは、こう述べています。検索ディスプレイコントローラの検索で選択されたテーブルビュー全体から行を知るには?私は私のアプリで検索したときのタイトルとして

stations = [barcelona, madrid, valencia, badajoz] 

私は「BA」を入力したとき、それは示しています

mysearch = [barcelona, badajoz] 

私がしたいですbadajozを選択すると、その行は、ステーションが3番のポジションにあるときに1の位置に戻ります。

何か考えてください。

PD:コード

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"SELF contains[cd] %@", 
            searchText]; 

    self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate]; 
} 

#pragma mark - UISearchDisplayController delegate methods 
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:[self.searchDisplayController.searchBar 
                selectedScopeButtonIndex]]]; 

    return YES; 
} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchScope:(NSInteger)searchOption 
{ 
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:searchOption]]; 
    return YES; 
} 

EDIT検索する関連:私は 以下の答えを使用して自分のコードを編集した - (無効)にtableView:(のUITableView *)のtableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { のNSLogを( @ "押す..."); NSUInteger row = [indexPath row];検索ビューの前に//古いコード

//index from the search 
    id searchResult = [searchResults objectAtIndex:row]; 
    int indexForResult = [ListaEstaciones indexOfObject:searchResult]; 
    //more stuff 

EDIT: 今では、この例のために働く:リストでそれがうまく検索すべての要素で、私はそれがうまく機能し、検索を開始したとき、問題はその停留所であります

- (void)filterContentForSearchText:(NSString*)searchText 
          scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"SELF contains[cd] %@", 
            searchText]; 

    self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate]; 
    searching = YES; 

しかし、私ドン:このコードでは、私はYESに検索ブール変数を変更するので、検索し、私はすべての要素のリストの行は、それはまだ前に、検索項目のリストのデ・インデックスを使用して選択し、これが起こりますすべての値のリストに戻ると、検索値をNOに変更する場所がわかりません。助言がありますか?どうもありがとう。 EDIT 2:あなたは、配列内のインデックスを見つけることができますオブジェクトを持っている場合は、このウェブサイトhttp://engineeringtheworld.wordpress.com/2011/04/11/detecting-when-clear-is-clicked-in-uisearchbar-x-button/

答えて

1

で解決しました。一番上にあなたの例を使用する:

id searchResult = [mysearch objectAtIndex:1]; 
int indexForResult = [stations indexOfObject:searchResult]; 

あなたは、彼らは意味がありませんように、検索をしなかった場合は、これらの二つの文を処理するとは思わないだろう。それらが処理されるのを止めるには、それらをifステートメントの中に入れ、検索をしたかどうかを確認する必要があります。

エラーを調べた後、1160オブジェクトの配列があり、コードがオブジェクト2147483647を要求しているようです。これは明らかに存在せず、コードがクラッシュします。なぜこのエラーが出るのですか私は完全にはわかりませんし、本当に答えることができるものです。ブレークポイントとデバッガを使用して、コードがどこに間違っているか調べます。

+0

これは問題ありません。何も検索せずに行を選択すると、エラーが発生します。ここでは、行を保存する部分のコードです。 NSUInteger row = [indexPath row]; //検索コントローラを配置する前に選択した行 //何かをブラウズした場合// id searchResult = [searchResults objectAtIndex:row]; int indexForResult = [ListAEstaciones indexOfObject:searchResult];なにか提案を? –

+0

どのようなエラーが出ますか?このコードはどこに行きますか?このような応答が長い場合は、質問を編集するのが最善かもしれません:) – jackslash

+0

編集中! ;) –

関連する問題