我做了一些搜索,一些编码,一些搜索,然后再编码。我只是不能让它自己工作。我想从我定义的数组中获取数据:
var allPublishers = [[String: String]]()
我将从外部API调用中填充数组。我可以每100个块调用一次刷新。这是人口:
for i in 0 ..< json["publishers"].count {
let pname: String = String(describing: json["publishers"][i]["publisher"]["account_name"])
let pid: String = String(describing: json["publishers"][i]["publisher"]["publisher_id"])
self.allPublishers.append(["name": pname, "id": pid])
}
例如,在前100后我调用此函数:
self.showPublishers()
现在只显示类型,用于以下目的:
func showPublishers(){
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
类型为:Array<Dictionary<String, String>>
部分填充的块的样本是:
[["id": "1100l6141", "name": "014loyalia"], ["id": "1101l11949", "name": "030magazin"]]
我有一个NSTableView设置的插座:
@IBOutlet weak var tableView: NSTableView!
我的Main.storyboard
:
除了ViewController.swift
插座之外,我还没有这方面的约束。
当我执行程序时,TableView会更新行,但不会更新数组中的值:
以下是我的tableView
功能:
extension ViewController:NSTableViewDataSource{
func numberOfRows(in tableView: NSTableView) -> Int {
return allPublishers.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return allPublishers[row][(tableColumn?.identifier.rawValue)!]
}
}
有人可以建议如何使用NSTableView
的实际数据填充此allPublishers
吗?
提前致谢!
答案 0 :(得分:2)
强烈建议您不要使用基于单元格的表格视图。
Cocoa Bindings和基于视图的表视图非常容易实现。
将allPublishers
声明为dynamic
@objc dynamic var allPublishers = [[String: String]]() // however a custom class is highly recommended.
datasource
Cell Based
更改为View Based
Content
绑定到ViewController > allPublishers
Value
的{{1}}绑定到Table View Cell
Table Cell View > objectValue.name
的{{1}}绑定到Value
请注意表视图单元格和表单元格视图
的微妙但重要的区别无需进一步的代码。
答案 1 :(得分:0)
我通过改变一些事情来解决这个问题。首先,我更改了内容模式&#34; Table View
中的Main.storyboard
来自&#34;基于视图&#34; to&#34; Cell Based&#34;:
这消除了将单元格映射到UI中的参数的要求。然后,我更改了调用列的ViewController.swift
函数:
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
if tableColumn == tableView.tableColumns[0] {
return allPublishers[row]["name"]!
} else if tableColumn == tableView.tableColumns[1] {
return allPublishers[row]["id"]!
}
return nil
}
这就像魅力一样。