我目前正在编写一个应用程序,使用故事板,在同一个窗口中包含两个UITableView
。
运行应用程序时,第一个UITableView
将填充一些“注册号码”。
当用户点击一个单元格时,第二个UITableView
应填充有关所选单元格的详细信息。
当点击第一个表格中的数字时,我有一个驱动:
的方法[mySecondTableView reloadData]
它做到了。我的印象是,在调用reloadData
命令时,它应该同时调用:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
和
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
第一次开火,但第二次不开火。 我有数据源和委托连接到自己。
我不确定我错过了什么。
两种方法都是要解雇吗?
答案 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}}。