ios5 UISearchBar 过滤表视图导致带有空单元格的断言错误

Posted

技术标签:

【中文标题】ios5 UISearchBar 过滤表视图导致带有空单元格的断言错误【英文标题】:ios5 UISearchBar to filter tableview causes Assertion error with a null cell 【发布时间】:2012-01-28 02:23:55 【问题描述】:

我正在使用 ios5 故事板,并且有一个带有 uisearchbar 的 tablview,我正在使用过滤结果。我正在遵循以下博客文章中的提示,其中我也提出了这个问题 http://code-ninja.org/blog/2012/01/08/ios-quick-tip-filtering-a-uitableview-with-a-search-bar/:

我看到的问题是,当从过滤后的数组中取回项目时,自定义 UITableViewCell 会返回为 null。在 iOS5 中,我知道你应该只需要通过 dequieReusableCell 获取一个单元格,而不是显式地初始化一个单元格。但是,当搜索栏中的搜索成功匹配时,单元格返回为空。我不确定如何使用自定义样式手动初始化我的单元格。有任何想法吗? 这是我的 cellForRowAtIndexPath 方法中的一个 sn-p。

ItemCell *cell = (ItemCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; self.searchBar.tableView。 如果(细胞 == 零) NSLog(@“为什么当我从搜索栏获得成功匹配时会发生这种情况?”);

这会导致以下错误: -[UISearchResultsTableView _createPreparedCellForGlobalRow:withIndexPath

中的断言失败

* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 数据源必须从 tableView:cellForRowAtIndexPath: 返回一个单元格:”

【问题讨论】:

【参考方案1】:

你在错误的桌子上打电话给dequeueReusableCellWithIdentifier:

您的原型在您的主表中定义,需要从那里取出。执行搜索时,系统会要求您填写一个特殊的搜索表。该表不包含您的单元格原型,并且它不会在原始表中搜索原型!

您的表仍可作为self.tableView 使用。您可以从那里出列,即使是搜索结果表。

而不是这个:

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

使用这个:

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

【讨论】:

以上是关于ios5 UISearchBar 过滤表视图导致带有空单元格的断言错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 过滤 UISearchBar 的核心数据

使用 UISearchbar 和过滤后自定义新表

UISearchBar 不在 TableViewController 的表视图标题中?

UISearchbar 并在查看控制器 xcode swift 中传递数据

第四章:IOS Table表视图搜索功能UISearchBar

将 UISearchBar 与表视图控制器一起使用并转到另一个视图时显示问题