我做了一些搜索,一些编码,一些搜索,然后更多的编码。我只是不能让它自己工作。我想从我定义的数组中获取数据:
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
吗?
提前致谢!
强烈建议您不要使用基于单元格的表格视图。
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
的Table View Cell
绑定到Table Cell View > objectValue.name
将第二列的Value
的Table View Cell
绑定到Table Cell View > objectValue.id
请注意表视图单元格和表单元格视图的细微但重要的区别
无需进一步的代码。
我通过改变一些事情来解决这个问题。首先,我将Table View
中的Main.storyboard
的“内容模式”从“基于视图”更改为“基于单元格”:
这消除了将单元格映射到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
}
现在这就像一个魅力。