Swift OSX扩展没有';t为方法调用tableView视图

Swift OSX扩展没有';t为方法调用tableView视图,swift,xcode,macos,nstableview,Swift,Xcode,Macos,Nstableview,我已经设置了一个要在OSX扩展中显示的表视图 我基本上是从OSXTableViewController复制了代码,然后在.xibTodayViewController中创建了相关接口,将tableView从文件所有者连接到tableView组件 我还将TodayViewController.xib设置为General面板中扩展的Main Interface 问题是,当我运行扩展时,方法numberOfRows(在tableView:NSTableView中)被正确地激发,但是tableView(

我已经设置了一个要在OSX扩展中显示的
表视图
我基本上是从OSX
TableViewController
复制了代码,然后在.xib
TodayViewController
中创建了相关接口,将
tableView
文件所有者连接到tableView组件
我还将
TodayViewController.xib
设置为
General
面板中扩展的
Main Interface

问题是,当我运行扩展时,方法
numberOfRows(在tableView:NSTableView中)
被正确地激发,但是
tableView(uutableview:NSTableView,viewfortablecolumn: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 {
    // ...
    }
}

我想我遗漏了一些东西。

您当前的问题是,您正在从
NSTableViewDataSource
中省略
tableView(objectValueFor:row:)
方法。如文件所述:

除非应用程序使用Cocoa绑定向表视图提供数据,否则此方法是必需的

tableView(tableView:NSTableView,viewfortablecolumn:NSTableColumn?,row:Int)
可用于自定义将用于显示对象值的视图,但如果您从未首先提供对象值,您将永远无法实现这一目标


但是,在macOS上,我建议查看
NSArrayController
和Cocoa绑定来填充表视图。在大多数情况下,设置起来要容易得多,而且还免费提供了很多不错的功能。

谢谢您的回答!:)实际上,我有一个方法,它被设置为返回
nil
,因此问题就出现了,对吗?但是我不明白为什么这个完全相同的代码在主应用程序上工作。是因为我用的是故事板吗?那是我的猜测。我不知道为什么这会在主应用程序中起作用(似乎不应该),但我在macOS上使用手动
NSTableViewDataSource
已经好几年了
NSArrayController
太方便了。嗯,我会研究一下。无论如何,我检查了
tableView(objectValueFor:row:)
方法从未被激发。所以,是的,在那之前应该还有另一个问题:奇怪的是,应该打电话给它。您能确保您的
numberOfRows
没有返回零、负值或其他值吗?是的,它返回的是1,这是数据源中的正确值。就好像它无法展示自己一样。可能我错过了一些链接,我几乎从来没有纯粹使用过.xib。我在.xib界面中将
表格视图链接到
文件的所有者
,这是一个
TodayViewController
类,对吗?表格视图是否基于(而不是基于单元格)?实现了哪些其他
NSTableViewDataSource
NSTableViewDelegate
方法?控制台上有记录吗?是的,它是基于视图的。我使用的代码与主osx应用程序完全相同,唯一的问题是从未调用
viewFor
方法,而
numberOfRows
方法是。奇怪的是我也有同样的问题。。你能找到解决办法吗?