UITableView cellForRowAtIndexPath从不叫

问题描述:

我有一个UITableView作为UIViewController的子视图。 viewController UI通过故事板进行管理。根据需要将委托和数据源设置为viewController。UITableView cellForRowAtIndexPath从不叫

我有以下代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    if (updateType == Profile) { 
     return 15; 
    } 
    else { 
     return 6; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 1; 
} 

以上两种方法被称为正是因为他们应该。调用[self.tableview reloadData]会导致再次调用方法。令人困惑的是- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath永远不会被调用。永远。

的数据源和委托代码设置,其中self.tableview是一个IBOutlet在故事板UITableView

self.tableview.delegate = self; 
self.tableview.dataSource = self; 

答案找到

我使用带有自动布局故事板。问题是,尽管故事板的其余部分被设置为wAny hAny,但尺寸被设置为w RegularHRegular。简单地切换它已经使它工作了!可笑,我知道,但它仍然是一个答案。

+0

尝试在代码中设置委托和数据源并查看是否有帮助。 – Oleshko

+0

此外,这里http://*.com/questions/24698313/uitableview-method-cellforrowatindexpath-not-called是真正有趣的情况下,当这个功能不能被称为。核实。 – Oleshko

+0

谢谢Oleshko - 委托和数据源已经在代码中设置。我尝试了建议重新约束,但没有任何区别。 – JordanMazurke

你确定你的dataSource和delegate被设置为正确的类吗?在IB中很容易混淆,特别是如果您复制/粘贴。把一个断点在viewDidAppear方法再在控制台呼叫

po self.tableView.dataSource 

,以验证它在运行时设置。

+0

我在代码中设置数据源和委托,所以这不成问题。另外,另外两个数据源方法被正确调用,所以链接肯定存在。 – JordanMazurke

有几种情况不会调用委托方法。因此,首先通过调试工具检查你的设置,看看你的设置是否合适,比如检查内存中是否存在表视图,委托和数据源。如果你的数据源是空的,那么表格视图甚至不会尝试调用哪个不是你的情况,因为你确实返回了某个数字。

通常,这只是程序员根据我之前所做的和看到的一些小错误而已。所以,双重和三重检查您的代码。你最好也发布你的 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

更新来自作者的回答: 事实证明,表格视图在某些尺寸等级下不可见。这就是为什么iOS甚至不会尝试,因为它根本不可见。这不是来自Apple的错误,它可以通过视图调试进行检测。

+1

正确设置委托和数据源方法 - 正确调用numberOfSectionsInTableView和numberOfRowsInSection方法。 – JordanMazurke

+0

男人,我以前在那里,事实证明,这只是一个愚蠢的错误。或者你能否给我更多的信息,以便我们能够有效地帮助你。 –

+1

你的方法绝对正确,过去我被这个东西烧毁了,但在这里并非如此。一切都设置正确。还有哪些其他信息可以帮助你帮助我?谢谢 – JordanMazurke

你确定你设置的界面生成器表视图出口?即self.tableView != nil

我使用带有自动布局故事板。问题是,尽管故事板的其余部分被设置为wAny hAny,但尺寸被设置为w RegularHRegular。简单地切换它已经使它工作了!可笑,我知道,但它是一个答案!

这工作:
This works

这不: This doesnt

这推动我疯狂的时间太长了,我还是不完全了解的机制,为什么这工程,但它确实。

+0

现在,我明白了为什么不调用委托方法。因为在wRhR大小类中,你的表视图的约束被卸载,因为可能你不支持这个大小。所以,在这个大小类中,表格视图将变为0高度。然后,iOS检测到它不是可视化的。事实证明,iOS甚至不想尝试调用它,因为它是不可见的。这绝对不是Apple的错误。这是大小类从字面上删除您的表视图。 –

+0

你自己解决它,我们无法帮助你。无论如何,很高兴看到这是有道理的。另一种检测方法是使用视图调试,您将看到您的表视图是该大小类下的一行。 –

在我的特殊情况下,除非numberOfRowsInSection被调用,直到我将tableview上的分隔符由于某种原因翻转为单行(将其设置为none),然后调用了我的heightForRowAtIndexPath,其中我有一些自定义大小计算在字体名称错误的字体上完成,这使得它翻转出来。不知道这是否有助于任何人,但这是发生在我身上的事情。