Xcode数组到NSTableView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xcode数组到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

NSTableView

除了ViewController.swift插座之外,我对此还没有任何约束力。

当我执行程序时,TableView会更新行,但不会更新数组中的值:

Rows

这是我的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和基于视图的表视图非常容易实现。

  • 宣布allPublishersdynamic @objc dynamic var allPublishers = [[String: String]]() // however a custom class is highly recommended.
  • 在Interface Builder中 断开datasource 将表格视图从Cell Based更改为View Based 将表格视图的Content绑定到ViewController > allPublishers 将第一列的ValueTable View Cell绑定到Table Cell View > objectValue.name 将第二列的ValueTable View Cell绑定到Table Cell View > objectValue.id

请注意表视图单元格和表单元格视图的细微但重要的区别

无需进一步的代码。

另一答案

我通过改变一些事情来解决这个问题。首先,我将Table View中的Main.storyboard的“内容模式”从“基于视图”更改为“基于单元格”:

Content Mode

这消除了将单元格映射到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

现在这就像一个魅力。

以上是关于Xcode数组到NSTableView的主要内容,如果未能解决你的问题,请参考以下文章

将数组加载到 TableView xCode

PHP JSON 数据到 Xcode Swift 数组

将选定的行复制到填充 Xcode 中另一个 UITableView 的数组

准备使用数组进行 Segue - Xcode 8.0 Swift 3.0

如何在 Xcode 项目中将字典数组写入 .txt 文件

将数组发送到下一个viewcontroller iOs xcode [重复]