Неверный источник данных NSTableView в Swift 4 - PullRequest
0 голосов
/ 06 ноября 2018

Я не могу найти ответы или решения для такой проблемы, как эта для swift 4. Я пишу для OSX, и когда я перезагружаю данные в моем tableView с помощью tableView.reloadData(), терминал возвращает ошибку -

Недопустимый источник данных NSTableView (). Должен реализовать numberOfRowsInTableView: и Tableview: objectValueForTableColumn: строка:

Насколько я знаю, я реализовал numberOfRowsInTableView и tableView в расширении.

Может ли кто-нибудь указать мне правильное направление?

    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 голосов
/ 09 августа 2019

Моим единственным решением было перезапустить Xcode и Mac. Там не было ничего плохого с кодом. У кого-то может быть такая же проблема, как и у меня.

0 голосов
/ 06 ноября 2018

Вы не используете Swift 4 API для метода NSTableViewDataSource. Вместо

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

Используйте эти правильные API:

func numberOfRows(in tableView: NSTableView) -> Int

См. Официальную документацию по API источника данных: https://developer.apple.com/documentation/appkit/nstableviewdatasource

...