Swift OSX扩展没有';t为方法调用tableView视图
我已经设置了一个要在OSX扩展中显示的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(
表视图
我基本上是从OSXTableViewController
复制了代码,然后在.xibTodayViewController
中创建了相关接口,将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
方法是。奇怪的是我也有同样的问题。。你能找到解决办法吗?