Xcode 数组到 NSTableView
Xcode Array to NSTableView
我进行了一些搜索,一些编码,一些搜索,然后一些编码。我只是还不能让它自己工作。我想从我定义的数组中获取数据:
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)!]
}
}
有人可以建议如何用 allPublishers
中的实际数据填充此 NSTableView
吗?
提前致谢!
我通过改变一些东西解决了这个问题。首先,我将 Main.storyboard
中 Table View
的 "Content Mode" 从 "View Based" 更改为 "Cell Based":
这删除了将单元格映射到 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
}
现在这很有用。
强烈建议您不要使用基于单元格的 table 视图。
Cocoa 绑定和基于视图的 table 视图很容易实现。
声明 allPublishers
为 dynamic
@objc dynamic var allPublishers = [[String: String]]() // however a custom class is highly recommended.
- 在界面生成器中
- 断开连接
datasource
- 将 table 视图从
Cell Based
更改为 View Based
- 将 table 视图的
Content
绑定到 ViewController > allPublishers
- 将第一列
Table View Cell
的Value
绑定到Table Cell View > objectValue.name
- 将第二列
Table View Cell
的Value
绑定到Table Cell View > objectValue.id
请注意细微但重要的区别Table View Cell 和 Table Cell View
无需更多代码。
我进行了一些搜索,一些编码,一些搜索,然后一些编码。我只是还不能让它自己工作。我想从我定义的数组中获取数据:
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)!]
}
}
有人可以建议如何用 allPublishers
中的实际数据填充此 NSTableView
吗?
提前致谢!
我通过改变一些东西解决了这个问题。首先,我将 Main.storyboard
中 Table View
的 "Content Mode" 从 "View Based" 更改为 "Cell Based":
这删除了将单元格映射到 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
}
现在这很有用。
强烈建议您不要使用基于单元格的 table 视图。
Cocoa 绑定和基于视图的 table 视图很容易实现。
声明
allPublishers
为dynamic
@objc dynamic var allPublishers = [[String: String]]() // however a custom class is highly recommended.
- 在界面生成器中
- 断开连接
datasource
- 将 table 视图从
Cell Based
更改为View Based
- 将 table 视图的
Content
绑定到ViewController > allPublishers
- 将第一列
Table View Cell
的Value
绑定到Table Cell View > objectValue.name
- 将第二列
Table View Cell
的Value
绑定到Table Cell View > objectValue.id
- 断开连接
请注意细微但重要的区别Table View Cell 和 Table Cell View
无需更多代码。