ios5 UISearchBar для фильтрации табличных представлений вызывает ошибку подтверждения с нулевой ячейкой - PullRequest
3 голосов
/ 28 января 2012

Я использую раскадровку ios5 и имею tablview с панелью uisearch, что я использую фильтр результатов.Я следую совету из следующего поста в блоге, где я также задал этот вопрос http://code -ninja.org / blog / 2012/01/08 / ios-quick-tip-filtering-a-uitableview-with-a-search-bar / :

Проблема, которую я вижу, заключается в том, что при получении элементов из моего отфильтрованного массива пользовательский UITableViewCell возвращается как ноль.В iOS5 я понимаю, что вам нужно только получить ячейку через dequieReusableCell и не инициировать ячейку явно.Однако, когда поиск в строке поиска успешно совпадает, ячейка возвращается как ноль.Я не уверен, как я могу вручную инициировать свою ячейку с пользовательским стилем.Есть идеи?Вот фрагмент моего метода cellForRowAtIndexPath.

ItemCell * cell = (ItemCell *) [tableView dequeueReusableCellWithIdentifier: CellIdentifier];self.searchBar.tableView.if (cell == nil) {NSLog (@ «Почему это происходит, когда я получаю успешное совпадение с панели поиска?»);}

Это приводит к следующей ошибке: Ошибка подтверждения в - [UISearchResultsTableView _createPreparedCellForGlobalRow: withIndexPath

* Завершение работы приложения из-за неисчислимой исключительной ситуации «NSInternalInconsistencyException», причина источника данных:должен вернуть ячейку из tableView: cellForRowAtIndexPath: '

1 Ответ

16 голосов
/ 25 июля 2012

Вы звоните dequeueReusableCellWithIdentifier: по неправильной таблице.

Ваши прототипы определены в вашей основной таблице, и их необходимо удалить из очереди.При выполнении поиска вас просят заполнить специальную таблицу поиска.Эта таблица не содержит прототипов вашей ячейки и не ищет в исходной таблице прототипы!

Ваша таблица все еще доступна как self.tableView.И вы можете удалить из него даже таблицу результатов поиска.

Вместо этого:

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

Используйте это:

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