Расширение OSX не вызывает метод tableView viewFor - PullRequest
0 голосов
/ 05 июля 2018

Я настроил Table View для отображения в расширении OSX.
Я в основном скопировал код из OSX TableViewController, затем я создал соответствующий интерфейс в .xib TodayViewController, соединил tableView из File's Owner с компонентом tableview.
Я также установил TodayViewController.xib как Main Interface для расширения на панели General

Проблема в том, что когда я запускаю расширение, метод numberOfRows(in tableView: NSTableView) запускается правильно, но не tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int). Следовательно, мой взгляд пуст.

У меня есть установка

class TodayViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate, NCWidgetProviding  {

    @IBOutlet weak var tableView: NSTableView!

    override var nibName: NSNib.Name? {
        return NSNib.Name("TodayViewController")
    }

    func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
        // Update your data and prepare for a snapshot. Call completion handler when you are done
        // with NoData if nothing has changed or NewData if there is new data since the last
        // time we called you
        completionHandler(.noData)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        tableView.headerView = nil

        tableView.target = self
        tableView.action = #selector(self.onItemClicked)

        tableView.isEnabled = true
        fetchData() // -> this method contains tableView.reloadData()
    }

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

    func numberOfRows(in tableView: NSTableView) -> Int {
    // ...
    }
}

Я думаю, что что-то упустил.

1 Ответ

0 голосов
/ 05 июля 2018

Ваша непосредственная проблема в том, что вы опускаете метод tableView(objectValueFor:row:) из NSTableViewDataSource. Как указано в документации:

Этот метод является обязательным, если ваше приложение не использует привязки Какао для предоставления данных в табличное представление.

tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) можно использовать для настройки представления, которое будет использоваться для отображения значения объекта, но если вы никогда не предоставите значение объекта в первую очередь, вы никогда не доберетесь до этого.

В macOS, однако, я бы посоветовал изучить NSArrayController и привязки Какао, чтобы заполнить ваше табличное представление. В большинстве случаев это значительно проще в настройке и также предоставляет множество полезных функций бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...