无法使NSTableView在Swift3中工作

时间:2016-10-13 22:08:16

标签: swift cocoa swift3

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

sed -i '' -E "s~^([ \t]*key2:[ \t]*).*~\1$val~" hash.yml 

然而,这给了我一个错误:

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.
        }
    }


}

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

正如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 {
        }
    }
}