类型'ProfilesTableViewController'不符合Xcode 6 GM种子中的协议'UITableViewDataSource'

时间:2014-09-10 13:44:42

标签: ios uitableview swift xcode6

今天我迁移到Xcode 6 GM种子,现在我收到以下错误:

  

键入' ProfilesTableViewController'不符合协议   ' UITableViewDataSource'

我已覆盖numberOfRowsInSectioncellForRowAtIndexPathnumberOfSectionsInTableView。实际上一切都很好,直到今天。我注意到,当我删除UITableViewDataSource时,一切正常,并且没有发生错误。所以..是否有必要使用' UITableViewDataSource'再来一次,或者只是覆盖它的功能?

3 个答案:

答案 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,并且我必须从类定义中删除数据源。