UITableView reloadData似乎不会导致调用cellForRowAtIndexPath :.

时间:2013-07-27 04:04:02

标签: ios cocoa-touch uitableview

我目前正在编写一个应用程序,使用故事板,在同一个窗口中包含两个UITableView

运行应用程序时,第一个UITableView将填充一些“注册号码”。

当用户点击一个单元格时,第二个UITableView应填充有关所选单元格的详细信息。

当点击第一个表格中的数字时,我有一个驱动:

的方法
[mySecondTableView reloadData]

它做到了。我的印象是,在调用reloadData命令时,它应该同时调用:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

第一次开火,但第二次不开火。 我有数据源和委托连接到自己。

我不确定我错过了什么。

两种方法都是要解雇吗?

8 个答案:

答案 0 :(得分:34)

当这样的事情发生在我身上时,通常是因为我在主线程之外调用-reloadData

答案 1 :(得分:19)

在reloadData之后,试试这个:

NSIndexSet * sections = [NSIndexSet indexSetWithIndex:0];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationNone];

我发现如果数据更改很微妙,表格视图似乎可以优化需要刷新。

答案 2 :(得分:3)

指出的答案并不能解决我的表格查看问题。它还在调用

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

然而,细胞绘制方法没有被解雇:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

我的问题是(因为我的错误当然)表视图高度为0.因此,当表格仅显示可见的单元格时,它永远不会尝试显示单元格。当我改变高度值时,绘图单元格方法再次开始。

Botom line 仔细检查您的相框并确保您的宽度和高度值非零!

答案 3 :(得分:1)

我刚刚遇到同样的问题。我使用performSelectorOnMainThread来调用方法,然后调用reloadData。这是必要的,因为我试图在hatfinch建议的主线程之外更新。

答案 4 :(得分:1)

确保使用waitUntilDone调用performSelectorOnMainThread:否,否则您可能仍会遇到相同的问题

答案 5 :(得分:1)

发现未调用cellForRowAtIndexPath的另一个原因。

如果numberOfRowsInSection返回0,则cellForRowAtIndexPath不会被调用。 这种情况发生在我的情况下,因为在视图控制器更改期间NSArray被取消分配,并且其后续计数(因为它为零)返回0。

答案 6 :(得分:0)

在我的头撞墙几天之后,这解决了我的问题:

设置All Exceptions断点,查看数据源中是否出现了越界异常。在没有设置断点的情况下,没有崩溃,并且tableview将无法重新加载。

完整答案here

答案 7 :(得分:0)

在我意识到我的.reloadData()调用是由前一个视图控制器实例的回调执行之前,我正在调试类似的问题几个小时。

所以我的断点正在调用我的那个视图控制器的旧实例的.reloadData()调用,但实际显示的新实例没有重新加载,因为它不是执行调用{ {1}}。