首页 > 解决方案 > 更新绑定到数组错误的tableview

问题描述

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

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

当我运行应用程序时,包含正确填充表视图的预设值myTeam的表,但是当我添加到该数组时,没有任何反应。经过研究,我发现了这个问题

不幸的是,就像大多数快速教程和问答一样,它是针对 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]
    }
}

PS我使用教程来达到我所做的一切。

标签: swiftmacoscocoa

解决方案


最简单的解决方案,我们将使用(完整的)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(连接检查器)

    • 断开dataSource
  • ⌥⌘7(装订检查员)
    • 将内容绑定到ViewController>模型键路径 myTeam

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

macOS 不知道复习。


推荐阅读