今天我迁移到Xcode 6 GM种子,现在我收到以下错误:
键入' ProfilesTableViewController'不符合协议 ' UITableViewDataSource'
我已覆盖numberOfRowsInSection
,cellForRowAtIndexPath
和numberOfSectionsInTableView
。实际上一切都很好,直到今天。我注意到,当我删除UITableViewDataSource
时,一切正常,并且没有发生错误。所以..是否有必要使用' UITableViewDataSource
'再来一次,或者只是覆盖它的功能?
答案 0 :(得分:5)
此代码编译良好:
class ProfileTableViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("foo", forIndexPath: indexPath) as UITableViewCell
return cell
}
}
因此,您绝对可以继承UITableViewController
并定义其UITableViewDataSource
协议实现。
请注意我使用的是override
关键字,而且我没有使用自动解包的参数 - 例如,不是这样的:
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
在之前的Xcode 6测试版中是正确的。
答案 1 :(得分:1)
我的猜测是,您至少没有根据错误实施所有required methods。
答案 2 :(得分:0)
编辑:由于Xcode 6 beta
语法:
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){
我们必须检查解包的tableView。所以我用过:
if let tblView = tableView {
//code
}
和
if let theIndexPath = indexPath {
//code
}
所以......为了不改变我的整个项目,我重写了这样的功能:
override func tableView(tableView: UITableView?, didSelectRowAtIndexPath indexPath: NSIndexPath?){
并且一切正常,除了我的更改后,ProfileTableViewController不符合UITableViewDataSource
,并且我必须从类定义中删除数据源。