永远不会调用 cellForRowAtIndexPath
Posted
技术标签:
【中文标题】永远不会调用 cellForRowAtIndexPath【英文标题】:cellForRowAtIndexPath is never called 【发布时间】:2014-11-01 04:12:51 【问题描述】:我有一个包含UIViewController
的情节提要,其中有UITableview
和UITableViewCell
,所有内容都已正确连接,并且我已经为 UIViewController 放置了所有必需的代码。
当我在模拟器中运行应用程序时,数据源函数之一 cellForRowAtIndexPath
从未被调用,但 numberOfRowsInSection
被调用
下面是我的视图控制器代码:
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的主要内容,如果未能解决你的问题,请参考以下文章
Android onSystemUiVisibilityChange 永远不会被调用
对 CancellationTokenSource.Cancel 的调用永远不会返回
QAbstractItemModel data() 永远不会被调用