2015-11-14 9 views
8

私はUISearchBarでUITableViewControllerを使用しています。私が前に見たことがないtextDidChangeメソッドで奇妙な警告が出ることを除いて、すべてうまくいくようです。UISearchBar textDidChange creating error:すべてを再利用した後に可視のビューが残っています:{(null)=(null); }

これは私のコードです:

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

    [self.searchResults removeAllObjects]; 
    if([searchText isEqualToString:@""]||searchText==nil){ 
     [self.tableView reloadData]; 
     return; 
    } 

    for(NSArray *monsterArray in self.monsterArray) { 
     NSString *name = monsterArray[0]; 
     NSRange r = [[name lowercaseString] rangeOfString:[searchText lowercaseString]]; 
     if(r.location != NSNotFound) { 
      if(r.location==0) { 
       [self.searchResults addObject:monsterArray]; 
      } 
     } 
    } 

    [self.tableView reloadData]; 
} 

プログラムをステップ実行することで、私は警告が右textDidChangeの終了前に起こることを発見しました。

There are visible views left after reusing them all: { (null) = (null); }

は誰もがなぜこれが起こっている知っているか、そしてどのようにそれを解決するために:私はタイトルで述べたように、警告がこれですか?

+0

同様のテキストフィールドデリゲートメソッドで同じ問題が発生しました: 'func textField(textField:UITextField、shouldChangeCharactersInRange range:NSRange、replacementString string:String) - > Bool'。これについては、インターネットには情報がないので、このXKCDのcommicは、私が感じて正確にどのように説明しますhttp://static.fjcdn.com/pictures/What+did+you+see_a484fb_4909175.jpg – Losiowaty

答えて

10

私は、カスタムUITextFieldとセクションヘッダビューと同様の問題がありました。私は、テーブルビューのデータをリロードし、リロード動作後becomeFirstResponderを呼び出す前に、テキストフィールドにresignFirstResponderを呼び出すことによって、警告を処分しました。以下のようなもの:他の答えはエラーを取り除くでしたが

// Workaround: hide and show keyboard to prevent warning when reloading results 
[self.searchTextField resignFirstResponder]; 
[self.tableView reloadData]; 
[self.searchTextField becomeFirstResponder]; 
+0

これはアップより多くの票に値する、これは持っています何週間も私を盗まれていて、今まで私が見つけたのは、あなたがそれについて何もできないと言っている人々です! – Kris

+0

私の場合は、それらを追加するとキーボードが隠れてしまい、再び登場しません。 likeFirstResponderがまったくトリガされないように.../ – Fengson

2

は、それはまた、いくつかの意図しない結果を持っていたコンソールに置かれています。主にresignFirstResponderを呼び出してからbecomeFirstResponderを呼び出すと、キーボードの状態がリセットされます。したがって、文字を入力すると、キーボードはアルファから数値にリセットされます。これは、文字列を入力しようとすると迷惑になります。私の場合は

私は私のUISearchBarは、テーブルビューのセクションヘッダに設定されていたときThere are visible views left after reusing them all: { (null) = (null); }エラーが記録されただけ見つけました。私は、UITableViewControllerの上に検索バーを浮かせておくためにこれをやっていました。

代わりにUIViewControllerを使用するようにリファクタリングし、UISearchBarを最上部に配置し、その下のUITableViewが問題を適切に修正したようです。

+0

同じ解決策が私の場合に役立ちました。 'resignFirstResponder'のシーケンスを' reloadData' 'becomeFirstResponder'と呼ぶというアイデアはあまりにもハッキリなようでした。 – Michael

関連する問題