更新tableview绑定到数组错误

时间:2018-06-10 17:29:45

标签: swift macos cocoa

我对Swift非常陌生,所以我猜这是一个新手的错误,但这是我的情况:

我正在尝试创建一个允许您将内容添加到列表中的应用程序。我有NSTextField用户输入数据,NSButton将数据添加到myTeam数组。 tableView绑定到myTeam数组(我认为这就是你所说的)。

当我运行应用程序时,包含预设值myTeam的表正确填充表视图,但是当我添加到此数组时没有任何反应。经过研究,我找到了this question

不幸的是,像大多数swift教程和Q& A一样,它适用于iOS。但我想我会尝试一下。我添加了

self.tableView.reloadData()
self.refresher.endRefreshing()

到我的代码,并分别收到两个错误:Value of type '(NSTableView, NSTableColumn?, Int) -> Any?' has no member 'reloadData'Value of type 'ViewController' has no member 'refresher'

下面是我的代码:

import Cocoa
import Darwin

class ViewController: NSViewController, NSTableViewDataSource {
 var myTeam = ["Test", "Test2"]



    @IBOutlet weak var myText: NSTextField!
    @IBOutlet weak var AddMember: NSButton!

    @IBAction func addmem(_ sender: Any) {
        myTeam.append(myText.stringValue);
        self.tableView.reloadData()
        self.refresher.endRefreshing()

    }
    override func viewDidLoad() {
        super.viewDidLoad()


    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }
    // MARK: DataSource
    func numberOfRows(in tableView: NSTableView) -> Int {
        return myTeam.count
    }
    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
        return myTeam[row]
    }
}

P.S。我使用this教程来尽我所能。

1 个答案:

答案 0 :(得分:1)

最简单的解决方案,我们将使用(完整)Cocoa Bindings:

  • 替换整个代码
    import Cocoa
    
    class ViewController: NSViewController  {
    
        @IBOutlet weak var myText: NSTextField!
    
        @objc dynamic var myTeam = ["Test", "Test2"]
    
        @IBAction func addmem(_ sender: NSButton) {
            myTeam.append(myText.stringValue)
        }
    }
    
  • 在Interface Builder中选择表格视图(不是封闭的滚动视图),然后按⌥⌘6(Connections Inspector)

    • 断开dataSource
  • ⌥⌘7(Bindings Inspector)
    • 内容绑定到ViewController> 模型关键路径 myTeam

由于您仍在使用objectValueFor,我假设表格单元格视图的值已绑定到objectValue

macOS不知道复习。