- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UITableViewController
,其中有一个 TableView
,其中我有一个 Cell,其中有另一个 TableView
。
当内部 TableView
为 indexPath (1,0)
尝试 dequeueReusableCellWithIdentifier
时,应用程序崩溃了
Terminating app due to uncaught exception 'NSRangeException',
reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
尽管内部 TableView
显然有 3 个部分。堆栈跟踪是:
-[__NSArrayI objectAtIndex:] + 190
-[UITableViewDataSource tableView:indentationLevelForRowAtIndexPath:] + 61
-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1711
+[UIView(Animation) performWithoutAnimation:] + 65
-[UITableView _configureCellForDisplay:forIndexPath:] + 312
-[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 271
因为跟踪,我尝试实现
override func tableView(tableView: UITableView,
indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int {
return 0
}
但随后应用程序崩溃了
-[UITableViewDataSource tableView:viewForFooterInSection:]
具有相同的索引 1 超出范围 [0 .. 0]
...
恕我直言,实现相对无关紧要,但确实如此
override func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if tableView.tag == 0 {
return super.tableView(tableView, cellForRowAtIndexPath: indexPath)
}
if let cell = tableView.dequeueReusableCellWithIdentifier("cell") as? UITableViewCell {
return cell
}
return UITableViewCell() // Shouldn't happen.
}
我对最后一行并不感到非常自豪 :) 但是您还可以做些什么来取悦编译器?我从来没有达到那条线。崩溃显然发生在 tag
为 1 的内部 TableView
中。
最佳答案
问题是对
的调用super.tableView(tableView, cellForRowAtIndexPath: indexPath)
但是 MasterViewController
是 UITableViewController
的子类,所以你调用基类 UITableViewController
的 cellForRowAtIndexPath
>。我想理解您的代码的意图(“嘿,我希望子级 cellForRowAtIndexPath
在适当的情况下调用父级”),但是您将类层次结构与 View 层次结构混为一谈。这不是实现您想要的方法。
相反,您可以执行以下操作:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if tableView.tag == 0 {
return tableView.dequeueReusableCellWithIdentifier("ParentCell", forIndexPath: indexPath) as! UITableViewCell
}
return tableView.dequeueReusableCellWithIdentifier("ChildCell", forIndexPath: indexPath) as! UITableViewCell
}
这为 0
的 tag
实例化了一种单元格类型,为 1
实例化了另一种单元格类型。请注意,我已经更改了 Storyboard以使两个 TableView 都使用动态原型(prototype),并且我已经更改了两个 TableView 的标识符,如上所示。
坦率地说,我认为让一个对象尝试充当两种不同类型的 TableView 的委托(delegate)是错误的。如果你真的有一个 View Controller 和两个 TableView ,我认为为每个 TableView 实现一个自定义委托(delegate)对象,根据需要实例化它们,设置 delegate
和 dataSource
适当的 TableView 。这样一来,您就可以避免在所有委托(delegate)方法中乱加“如果表 0 执行 x 否则执行 y”逻辑。
但是,更广泛地说,我建议不要在 TableView 中使用 TableView 。
关于ios - dequeueReusableCellWithIdentifier 索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30545330/
我已阅读 this question并认为我理解这两种方法之间的区别,直到我找到一个奇怪的例子: 在Storyboard中设置table view cell的样式为Basic,Identifier为C
dequeueReusableCellWithIdentifier 有两个重载,我正在尝试确定何时应该使用一个与另一个? 关于 forIndexPath 函数的苹果文档指出,“此方法使用索引路径根据单
我在我的一个 TableView 中使用仪器发现了内存泄漏,恰好在这一行: [[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self
我正在使用带有 UITableViewController 和 UITableViewCell 子类的 ios5 Storyboard。我不想在 View 的 Storyboard设计器中设计单元格的
我正在尝试在独立于 Storyboard 和 Nib 配置的表格 View 中使用自定义单元格。 每当我使用 tableview 的 dequeuing 方法时,这些单元格都会作为标准返回,即磨坊单元
如果我打电话: -[UITableView dequeueReusableCellWithIdentifier] 然后我选择不是 在此方法中重用单元格 - (UITableViewCell *)tab
我的目标是显示一个单元格列表,这些单元格由我从服务器上提取的一些数据填充。当用户向下滚动时,我希望有一个表格单元格,上面写着“正在加载更多”,然后随着更多单元格被数据填充而消失。 以下是执行此操作的相
好的,我有一个表格,其中包含 3 个不同的原型(prototype)单元格(cellVaccination、cellAdmin、cellExpire)。在我的 cellForRowAtIndexPat
我有一个 UITableView,一旦它滚出屏幕,它就不会释放它显示的数据。 每个表格单元格都需要显示名称、日期和图片。第一个充满屏幕的单元格在启动时可以正常工作,因为它们没有被重复使用。然而,一旦您
我在带有自定义单元格的 UIViewController 中使用 UITableView。但是,当 dequeueReusableCellWithIdentifier 被调用时,它有时会创建一个新单元
我试图了解出了什么问题,因为当我进行 TableView 更新并调用 cellForRowAtIndexPath 时, dequeueReusableCellWithIdentifier 无法取回我需
我有一个使用 NSLayoutConstraints 的自定义/子类 UITableViewCell。最左边的 UIImageView 可能填充也可能不填充图像,如果没有,则此字段右侧的对象自然会向左
我有一个最初加载一个自定义单元格的 tableView。该单元格有一个文本字段和一个用户可以修改的段控件。还有一个添加单元格按钮,如果按下该按钮,则会在前一个单元格下方添加另一个自定义单元格。用户最多
我有一个核心数据支持的 TableView ,它显示了一个可编辑字段列表,对于不同的字段类型,我有不同的 UTableViewCells 和不同的单元格标识符。当我在模拟器中滚动得太快或试图“弹”过最
我使用几乎每个人都用来处理 cellForRowAtIndexPath 的“著名”样板代码: UITableViewCell *cell = [tableView dequeueReusableCel
=> Demo Project @ GitHub Int { return 0 } 但随后应用程序崩溃了 -[UITableViewDataSource tableView:viewForFoo
我的 UITableView 有问题。当 UIViewController 结束加载 UITableViewCell 时,第一次加载大约需要 4 秒 6 秒。当我再次调用我的 UIViewContro
如果 dequeueReusableCellWithIdentifier 在单元格离开屏幕后重新使用它们,这是否意味着在单元格上设置的实例变量将由于其新用法而被覆盖? 例如,如果我要在实例变量中缓存单
我在想 - dequeueReusableCellWithIdentifier 仍然必须实例化一个新单元格,并且根据实例化单元格的尺寸,它必须重新计算布局。那么这种出列实际上有什么帮助呢? 最佳答案
我对 dequeueReusableCellWithIdentifier 方法的使用及其工作原理有点困惑。我目前有一个 searchBar 和两个可变数组(比如 filteredTableData 和
我是一名优秀的程序员,十分优秀!