非法 NSTableView 数据源

Posted

技术标签:

【中文标题】非法 NSTableView 数据源【英文标题】:Illegal NSTableView data source 【发布时间】:2017-05-29 19:21:21 【问题描述】:

目前正在做一些快速开发并正在玩这个教程: https://www.brandpending.com/2016/01/14/using-core-data-in-a-swift-cocoa-app-to-populate-an-nstableview/

我已经更新了代码,因为上面的一些代码已经过时了,但是我越来越害怕了

***非法的NSTableView数据源

不确定是什么导致了问题,因为我没有在上述教程中创建的自定义内容之外链接我的 TableView 委托或数据源出口。我相信抛出错误的代码在某个地方的下面的函数中。否则一定有我遗漏的东西。

 override func viewDidLoad() 
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    let appDelegate = NSApplication.shared().delegate as! AppDelegate
    managedContext = appDelegate.managedObjectContext

    tableView.delegate = self
    tableView.dataSource = self

    fetchDataAndRefreshTable()



//MARK: Table Stuff
func numberOfRowsInTableView(tableView: NSTableView) -> Int 
    return data.count


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

    let result = tableView.make(withIdentifier: tableColumn!.identifier, owner: self) as! NSTableCellView

    let item = data[row]

    if let val = item.value(forKey: tableColumn!.identifier) as? String 
        result.textField?.stringValue = val
     else 
        result.textField?.stringValue = ""
    
    return result

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

本教程是用 Swift 2 编写的。您的代码似乎是 Swift 3。

numberOfRowsInTableView 的签名错误。在 Swift 3 中是

func numberOfRows(in tableView: NSTableView) -> Int 
    return data.count

PS:最好在 Interface Builder 中连接委托和数据源,而不是在代码中。

【讨论】:

是的,我移植了大部分内容,但似乎总是忽略两者之间的细微差别。谢谢一堆!修复了它。

以上是关于非法 NSTableView 数据源的主要内容,如果未能解决你的问题,请参考以下文章

无法以编程方式将字典数组中的行添加到 NSTable

遍历 NSTableview 或 NSArrayController 以获取数据

如何使用 NSTableViewDiffableDataSource 通过 NSTableView 加载数据

NSTableView 加载数据,但无法重新加载

NSTableView 和数据验证?

使用乘法 NSArrayControllers 和 NSTableView 绑定数据