7

我目前正在使用情节提要编写一个应用程序,该应用程序UITableView在同一窗口中包含两个 s。

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

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

在第一个表中点击一个数字时,我有一种方法可以驱动:

[mySecondTableView reloadData]

它确实如此。我的印象是,在调用reloadData命令时,它应该同时调用:

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

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

第一个着火了,但第二个不会。我将数据源和委托都连接到自己。

我不确定我错过了什么。

这两种方法都是用来开火的吗?

4

8 回答 8

34

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

于 2013-12-02T21:14:37.403 回答
19

重新加载数据后,试试这个:

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

我发现如果数据变化很微妙,表格视图似乎优化了刷新的需要。

于 2013-08-15T04:07:24.920 回答
3

尖锐的答案并不能解决我的表格视图问题。它还在呼唤

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

但是单元格绘制方法没有被触发:

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

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

底线仔细检查您的表格框架并确保您的宽度和高度值不为零!

于 2014-06-19T10:55:05.310 回答
1

我刚刚遇到了同样的问题。我用 aperformSelectorOnMainThread调用一个方法,然后调用reloadData. 这是必要的,因为我试图按照 hatfinch 的建议在主线程之外进行更新。

于 2014-02-23T23:09:53.507 回答
1

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

如果numberOfRowsInSection返回 0,cellForRowAtIndexPath则不会被调用。这发生在我的案例中,因为在视图控制器更改期间取消分配了 NSArray 并且其结果计数(因为它是 nil)返回 0。

于 2014-10-01T17:33:17.130 回答
1

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

于 2014-03-17T18:33:24.573 回答
0

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

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

于 2016-06-15T03:45:13.673 回答
0

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

设置 All Exceptions 断点并查看数据源中是否出现越界异常。如果不设置断点,则不会发生崩溃,并且 tableview 将无法重新加载。

完整答案在这里

于 2015-08-20T17:21:06.393 回答