【发布时间】:2014-11-01 04:12:51
【问题描述】:
我有一个包含UIViewController 的情节提要,其中有UITableview 和UITableViewCell,所有内容都已正确连接,并且我已经为 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 中查看视图控制器的属性,它在检查器的“快速帮助”选项卡下显示的是什么类型?)