永远不会调用UITableView cellForRowAtIndexPath

时间:2015-06-20 21:02:14

标签: ios objective-c uitableview uiviewcontroller

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

我有以下代码:

- (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是故事板中UITableView的IBOutlet:

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

找到答案

我正在使用具有自动布局的故事板。问题是尺寸设置为wRegular hRegular,尽管故事板的其余部分设置为wAny hAny。只需切换它就可以了!荒谬我知道,但它仍然是一个答案。

5 个答案:

答案 0 :(得分:1)

在某些情况下,不会调用委托方法。因此,首先通过调试工具检查您的设置,以查看您的设置是否合适,例如检查内存中是否存在表视图,委托和dataSource。如果您的数据源为空,则表视图甚至不会尝试调用哪个不是您的情况,因为您确实返回了某个数字。

通常,这只是程序员根据我之前制作和看到的内容制作的一个小错误。因此,请检查您的代码。你最好发布你的 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath也是如此。

来自作者答案的最新消息: 事实证明,在某些大小的类下,表视图是不可见的。这就是 iOS 甚至不会尝试的原因,因为它根本不可见。这不是来自 Apple 的错误,可以通过查看调试来检测。

答案 1 :(得分:1)

我正在使用具有自动布局的故事板。问题是尺寸设置为wRegular hRegular,尽管故事板的其余部分设置为wAny hAny。只需切换它就可以了!荒谬我知道,但它仍然是一个答案!

这有效:
This works

这不是: This doesnt

这让我疯狂了很长时间,我仍然不完全理解为什么这样做有效但是确实如此。

答案 2 :(得分:0)

您确定您的dataSource和delegate设置为正确的类吗?如果你复制/粘贴,在IB中很容易搞砸。在viewDidAppear方法中放置一个断点,然后在控制台调用

po self.tableView.dataSource

验证它是否在运行时设置。

答案 3 :(得分:0)

您确定在界面构建器上设置了表视图插座吗?,即self.tableView != nil

答案 4 :(得分:0)

在我的特殊情况下,除了numberOfRowsInSection之外什么都没有被调用,直到我将tableview上的分隔符由于某种原因(由于它设置为none)而将其转换为单行,然后我的heightForRowAtIndexPath被调用,之后我进行了一些自定义大小调整计算在字体名称错误的字体上,使其翻转。不确定这对任何人都有帮助,但这就是发生在我身上的事。