更新 tableview 绑定到数组错误
Posted
技术标签:
【中文标题】更新 tableview 绑定到数组错误【英文标题】:Updating tableview binded to array error 【发布时间】:2018-06-10 17:29:44 【问题描述】:我对 Swift 非常陌生,所以我猜这是一个新手错误,但这是我的情况:
我正在尝试创建一个允许您将内容添加到列表的应用程序。我有一个NSTextField
,用户在其中输入数据和一个NSButton
,用于将该数据添加到myTeam
数组中。 tableView
被绑定(我认为这就是你所说的)到 myTeam
数组。
当我运行应用程序时,包含myTeam
的预设值的表会正确填充表视图,但是当我添加到此数组时,没有任何反应。经过研究,我找到了this question。
不幸的是,就像大多数快速教程和问答一样,它是针对 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]
附:我使用this 教程来达到我所做的那样。
【问题讨论】:
导入 Cocoa 不需要导入 Darwin @LeoDabus 好的。在教程中看到我应该添加它。谢谢。 【参考方案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(连接检查器)
断开连接dataSource
按 ⌥⌘7(绑定检查器)
将内容绑定到ViewController
> 模型键路径 myTeam
由于您仍在使用objectValueFor
,我假设表格单元格视图的值已经绑定到objectValue
。
macOS 不知道复习。
【讨论】:
完美!谢谢。快速提问。你能解释一下你的代码吗?我真的不明白其中的大部分。比如我删除了@objc dynamic
,屏幕是空白的。
Cocoa Bindings 是一个使用 Key-Value-Observing 的功能。如果观察到的对象已更改,则绑定值会自动更新。要启用 KVO,需要将数据源数组声明为 @objc dynamic
。
知道了。完美。以上是关于更新 tableview 绑定到数组错误的主要内容,如果未能解决你的问题,请参考以下文章