swift 4 中的非法 NSTableView 数据源

Illegal NSTableView data source in swift 4

对于 swift 4 这样的问题,我找不到任何答案或解决方案。我正在为 OSX 写作,当我使用 tableView 重新加载数据时=13=],终端returns错误-

Illegal NSTableView data source (). Must implement numberOfRowsInTableView: and tableView:objectValueForTableColumn:row:

据我所知,我已经在扩展中实现了 numberOfRowsInTableViewtableView

有人能指出我正确的方向吗?

    import Cocoa

    class ViewController2: NSViewController {


    var data: [[String: String]]?

    @IBOutlet weak var tableView: NSTableView!
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        data = [
                [
                    "type" : "type1",
                    "details"  : "etc",
                    "cost" : "22"
                ],
                [
                    "type" : "type2",
                    "details"  : "etc",
                    "cost" : "33"
                ],
                [
                    "type" : "type3",
                    "details"  : "etc",
                    "cost" : "44"
            ]
        ]

        self.tableView.reloadData()
    }


    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

extension ViewController2: NSTableViewDataSource, NSTableViewDelegate{

    func numberOfRowsInTableView(tableView: NSTableView) -> Int {
        return (data?.count)!
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let item = (data!)[row]
        let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView
        cell?.textField?.stringValue = item[(tableColumn?.identifier.rawValue)!]!
        return cell
    }
}

您没有为 NSTableViewDataSource 方法使用 Swift 4 API。而不是

func numberOfRowsInTableView(tableView: NSTableView) -> Int {}

使用这些正确的 APIs:

func numberOfRows(in tableView: NSTableView) -> Int

数据来源见官方文档API:https://developer.apple.com/documentation/appkit/nstableviewdatasource

我唯一的解决办法是重新启动 Xcode 和 Mac。代码没有问题。有人可能和我有同样的问题。