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
。明白了。完美的