Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 更新绑定到数组的tableview时出错_Swift_Macos_Cocoa - Fatal编程技术网

Swift 更新绑定到数组的tableview时出错

Swift 更新绑定到数组的tableview时出错,swift,macos,cocoa,Swift,Macos,Cocoa,我对斯威夫特非常陌生,所以我猜这是一个新手的错误,但我的情况如下: 我正在尝试创建一个应用程序,允许您将内容添加到列表中。我有一个NSTextField用户在其中输入数据,还有一个NSButton将数据添加到myTeam数组中。tableView被绑定到myTeam数组中(我想这就是你所说的) 当我运行应用程序时,包含预设值myTeam的表将正确填充表视图,但当我添加到此数组时,不会发生任何事情。经过研究,我发现 不幸的是,像大多数swift教程和问答一样,它是针对iOS的。但我想我会尝试一下。

我对斯威夫特非常陌生,所以我猜这是一个新手的错误,但我的情况如下:

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

当我运行应用程序时,包含预设值
myTeam
的表将正确填充表视图,但当我添加到此数组时,不会发生任何事情。经过研究,我发现

不幸的是,像大多数swift教程和问答一样,它是针对iOS的。但我想我会尝试一下。我补充说

self.tableView.reloadData()
self.refresher.endRefreshing()
到我的代码,并收到两个错误:
类型的值“(NSTableView,NSTableColumn?,Int)->Any?”没有成员“重载数据”
,而类型为“ViewController”的值没有成员“刷新器”

下面是我的代码:

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

顺便说一句,我使用了教程来达到我的目的。

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

  • 将整个代码替换为

    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(连接检查员)

    • 断开数据源的连接
  • 压榨⌥⌘7(装订检验员)
    • 将内容绑定到
      ViewController
      >模型密钥路径
      myTeam
由于您仍在使用
objectValueFor
,因此我假设表格单元格视图的值已绑定到
objectValue


macOS不知道进修者。

如果导入,则无需导入DarwinCocoa@LeoDabus好啊在一个教程中看到了,我想我应该添加它。谢谢,太好了!谢谢快速提问。你能解释一下你的代码吗?大部分我都不太明白。例如,我删除了
@objc dynamic
,屏幕为空。Cocoa绑定是一种使用键值的功能。如果观察到的对象已更改,则绑定值将自动更新。要启用KVO,需要将数据源阵列声明为
@objc dynamic
。明白了。完美的