2012-01-28 4 views
3

私はios5 storyboardを使用しており、結果をフィルタリングするuisearchbarを持つtablviewを持っています。私が見る問題は私のフィルタ配列から項目を取り戻す時にカスタムUITableViewCellのがnullとして戻ってくるということですios5 UISearchBarでtableviewをフィルタリングすると、nullセルでアサーションエラーが発生します

:私は、私もこの質問 http://code-ninja.org/blog/2012/01/08/ios-quick-tip-filtering-a-uitableview-with-a-search-bar/を提起し、次のブログ記事からヒントを以下のよ。 iOS5では、dequieReusableCell経由でセルを取得し、明示的にセルを初期化する必要がないことを理解しています。しかし、検索バーの検索がセルと正常に一致すると、nullに戻ります。カスタムスタイルでセルを手動で初期化する方法がわかりません。何か案は? ここに、私のcellForRowAtIndexPathメソッドのスニペットがあります。

ItemCell * cell =(ItemCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; self.searchBar.tableView。 if(cell == nil){ NSLog(@ "検索バーから成功した一致を得ると、どうしてですか?");中 アサーションの失敗 - [UISearchResultsTableView _createPreparedCellForGlobalRow::これは、次のエラーが発生}

キャッチされない例外により 'NSInternalInconsistencyException' にwithIndexPath

*アプリの終了は、その理由は:「のUITableViewデータソースがのtableViewからセルを返す必要があります:cellForRowAtIndexPath: '

答えて

16

あなたは間違ったテーブルにdequeueReusableCellWithIdentifier:と呼んでいます。

プロトタイプはプライマリテーブルで定義されており、そこからデキューする必要があります。検索を実行すると、特別な検索テーブルを記入するよう求められます。そのテーブルにはあなたのセルプロトタイプは含まれておらず、プロトタイプの元のテーブルを検索しません!

あなたのテーブルはまだself.tableViewとして利用可能です。また、検索結果テーブルの場合でも、そこからデキューできます。これに代えて

ItemCell *cell = (ItemCell *)[tableView 
    dequeueReusableCellWithIdentifier:CellIdentifier]; 

使用この:

ItemCell *cell = (ItemCell *)[self.tableView 
    dequeueReusableCellWithIdentifier:CellIdentifier]; 
関連する問題