非法的NSTableView数据源

时间:2017-01-14 14:48:18

标签: ios swift tableview datasource nstableview

目前正在进行一些快速开发并正在使用本教程: https://www.brandpending.com/2016/01/14/using-core-data-in-a-swift-cocoa-app-to-populate-an-nstableview/

我已经更新了代码,因为上面的一些代码已经过时了,但是我得到了可怕的

  

***非法的NSTableView数据源

不确定是什么导致了这个问题,因为我没有在上面教程中创建的自定义内容之外链接我的TableView委托或数据源出口。抛出错误的代码我认为是在某个地方的下面的函数。否则必定会有我遗漏的东西。

 override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    let appDelegate = NSApplication.shared().delegate as! AppDelegate
    managedContext = appDelegate.managedObjectContext

    tableView.delegate = self
    tableView.dataSource = self

    fetchDataAndRefreshTable()

}

//MARK: Table Stuff
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
    return data.count
}

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

    let result = tableView.make(withIdentifier: tableColumn!.identifier, owner: self) as! NSTableCellView

    let item = data[row]

    if let val = item.value(forKey: tableColumn!.identifier) as? String {
        result.textField?.stringValue = val
    } else {
        result.textField?.stringValue = ""
    }
    return result
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

本教程是用Swift 2编写的。您的代码似乎是Swift 3。

numberOfRowsInTableView的签名是错误的。在Swift 3中它是

func numberOfRows(in tableView: NSTableView) -> Int {
    return data.count
}

PS:最好在Interface Builder中而不是在代码中连接委托和数据源。