快速的非法NSTableView数据源4

时间:2018-11-06 16:18:29

标签: swift macos swift4 nstableview

对于诸如此类的问题,我无法找到任何答案或解决方案,例如Swift4。我正在为OSX编写程序,当我用tableView重新加载tableView.reloadData()中的数据时,终端返回错误-

  

非法的NSTableView数据源()。必须实现numberOfRowsInTableView:和   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
    }
}

2 个答案:

答案 0 :(得分:2)

您没有将Swift 4 API用于NSTableViewDataSource方法。代替

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

使用这些正确的API:

func numberOfRows(in tableView: NSTableView) -> Int

请参阅数据源API的官方文档:https://developer.apple.com/documentation/appkit/nstableviewdatasource

答案 1 :(得分:0)

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