【问题标题】:Can not make NSTableView work in Swift3不能让 NSTableView 在 Swift3 中工作
【发布时间】:2016-10-13 22:08:15
【问题描述】:

我在让 NSTableView 与 Swift 3 和 XCode 8 一起工作时遇到问题。我有一个包含一个表和一列的应用程序,并尝试从 NSMutableArray 添加项目。这是我的代码:

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var tableView: NSTableView!
    var objects: NSMutableArray! = NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.objects.add("one")
        self.objects.add("two")
        self.objects.add("three")
        self.objects.add("four")

        self.tableView.reloadData()
    }

    func numberOfRowsInTableView(tableView: NSTableView) -> Int
    {
        return self.objects.count
    }

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
    {
        let cellView = tableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView

        cellView.textField!.stringValue = self.objects.object(at: row) as! String

        return cellView
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

但是这给了我一个错误:

*** Illegal NSTableView data source (<NSView: 0x610000120820>).  Must implement numberOfRowsInTableView: and tableView:objectValueForTableColumn:row

看起来这两种方法都已实现,所以我不知道为什么会出现此错误。 表视图的数据源和委托都设置为 man 视图。

【问题讨论】:

  • 您是否将表格数据源设置为委托为自己?

标签: swift cocoa swift3


【解决方案1】:

您的 numberOfRows 方法签名对于当前的 macOS SDK 不正确。应该是:
func numberOfRows(in tableView: NSTableView) -&gt; Int

【讨论】:

    【解决方案2】:

    按照 pbush25 的建议,我必须在代码中设置委托和数据源。另外,我将 TableView 模式切换为“基于单元格”,然后最终代码如下所示:

    import Cocoa
    
    class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
    
        @IBOutlet weak var tableView: NSTableView!
        var objects: NSMutableArray! = NSMutableArray()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.objects.add("one")
            self.objects.add("two")
            self.objects.add("three")
            self.objects.add("four")
    
            tableView.delegate = self
            tableView.dataSource = self
        }
    
        func numberOfRows(in tableView: NSTableView) -> Int
        {
            return self.objects.count
        }
    
        func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
        {
            return self.objects.object(at: row)
        }
    
        override var representedObject: Any? {
            didSet {
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2017-02-18
      • 2018-03-17
      • 2014-11-30
      • 2014-04-05
      • 2012-09-23
      相关资源
      最近更新 更多