永远不会调用 cellForRowAtIndexPath

Posted

技术标签:

【中文标题】永远不会调用 cellForRowAtIndexPath【英文标题】:cellForRowAtIndexPath is never called 【发布时间】:2014-11-01 04:12:51 【问题描述】:

我有一个包含UIViewController 的情节提要,其中有UITableviewUITableViewCell,所有内容都已正确连接,并且我已经为 UIViewController 放置了所有必需的代码。

当我在模拟器中运行应用程序时,数据源函数之一 cellForRowAtIndexPath 从未被调用,但 numberOfRowsInSection 被调用

“func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int”被调用 但是“func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell”永远不会调用

下面是我的视图控制器代码:

import UIKit

class DVViewController: UIViewController, UITableViewDelegate, UITableViewDataSource


    @IBOutlet var tableView : UITableView?
    var tableData = ["Row 1", "Row 2", "Row 3"]
    let kCellID = "cell"

    override func viewDidLoad()
    
        super.viewDidLoad()

        self.tableView?.delegate = self;
        self.tableView?.dataSource = self;

        //load cell
        self.tableView?.registerClass(UITableViewCell.self, forCellReuseIdentifier: kCellID);
        self.tableView?.reloadData();
    

    //MARK: Tableview delegates
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    
        return self.tableData.count;
    

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    
       //var cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: kCellID)
        let cell : UITableViewCell = UITableViewCell (style: UITableViewCellStyle.Default, reuseIdentifier: kCellID);
        return cell;
    

有人可以建议为什么从未调用过cellForRowAtIndexPath 吗?

【问题讨论】:

您是否设置了断点并确保 ARC 没有发布任何内容?在这个时间点上,你不能依赖任何东西来保证 Swift 和新的 Xcode Beta 是正确的。每次更新时,内存保留、插座、选项都会发生变化。 Swift 是一种快速变化的语言,坦率地说,在 Swift 退出 Beta 版之前,在 Stack Overflow 上向人们提出这些问题是非常愚蠢的。在 Objective-C 中尝试相同的逻辑,如果它有效,你就知道问题出在哪里了。 我用目标 c 重新创建了项目,但仍然有同样的问题,“numberOfRowsInSection”被调用但不是“cellForRowAtIndexPath”。 如果你所有的出口都连接在 Objective C 中,并且代码与上面的代码匹配,并且没有奇怪的状态表明你没有显示 tableView 可以设置为 nil 的位置,并且 tableData 是返回正确的计数,那么您可能需要使用 Xcode 5 进行测试并查看结果。如果这确实在 Xcode 5 而不是 6 中使用 Objective-C 有效,那么您已经确认这是 Xcode 6 的问题。如果没有,那是你的代码。 TheGamingArt,明天会尝试更新,谢谢。 您是否有机会将此项目作为“主细节”项目启动,然后用您当前的控制器替换从 UITableViewController 派生的控制器,不是吗? (如果您在 Interface Builder 中查看视图控制器的属性,它在检查器的“快速帮助”选项卡下显示的是什么类型?) 【参考方案1】:

这就是我所做的,仅卸载了重新安装的 Xcode 6 和 Xcode 5 和 6,运行项目并且它工作正常。经过 2 天的调试后,重新安装成功了。

【讨论】:

呃,你知道他们将 Xcode 6 更新到了 GM 版本吧?..... 当他们宣布 iPhone 6 时 谢谢,我在它发布的同一天下载了:)【参考方案2】:

我刚刚检查了您的代码,它有效。 检查是否调用了numberOfRowsInSection。如果没有,请检查storyboard 中的连接。

【讨论】:

是的,对我有用。故事板中缺少 IBOutlet 的连接是我能想到的唯一想法,这也会产生问题。 我也是这么想的,没问题。如果没有正确连接 Outlet,则不会调用任何数据源方法,但会调用“numberOfRowsInSection”,但不会调用“cellForRowAtIndexPath”【参考方案3】:

试试这个:

MainViewController 类:UIViewController、UITableViewDataSource、UITableViewDelegate

func viewDidLoad()

super.viewDidLoad()

tableView.dataSource = 自我

tableView.delegate = self

【讨论】:

以上是关于永远不会调用 cellForRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

S3.putObject - 回调永远不会被调用

Android onSystemUiVisibilityChange 永远不会被调用

对 CancellationTokenSource.Cancel 的调用永远不会返回

QAbstractItemModel data() 永远不会被调用

FCM - onTokenRefresh() 永远不会被调用

Hibernate @PostLoad 永远不会被调用