我有一些JSON文件的数据,我已将其转换为:
var tempArray = [NSDictionary]()
以下是此数据的示例:
(
{
active = y;
"campaign_id" = "Sample ID 1";
description = "Sample Text";
"end_date_time" = "2017-10-01 00:00:00";
"on_expiry" = ignore;
"on_invalid_user" = reject;
"start_date_time" = "2017-07-01 00:00:00";
"voucher_code" = SAMPLEON1;
"voucher_code_id" = "Sample ID 4";
},
{
active = y;
"campaign_id" = "Sample ID 2";
description = "Sample Text";
"end_date_time" = "2017-10-01 00:00:00";
"on_expiry" = ignore;
"on_invalid_user" = reject;
"start_date_time" = "2017-06-02 00:00:00";
"voucher_code" = SAMPLEOFF1;
"voucher_code_id" = "Sample ID 5";
}
)
我设置了NSTableView插座,它的列标识相对于上面的字典:
@IBOutlet var voucherTableView: NSTableView!
在我的Controller中运行voucherTableView.reloadData();
代码后,表格会填充适量的行,但列中的数据完全相同:
这是我的tableView
功能:
private func tableView(tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cellView = voucherTableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView
cellView.textField!.stringValue = self.values.object(at: row) as! String
return cellView
}
有没有人知道如何将数据从我的Array中获取到reload命令的tableView中?
答案 0 :(得分:1)
我建议使用Cocoa Bindings
datasource
连接到目标类实施这两种方法(不需要viewForColumn:row
)
func numberOfRows(in tableView: NSTableView) -> Int
{
return tempArray.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
{
return tempArray[row]
}
在Interface Builder Bindings中,Inspector将文本字段的value
绑定到Table Cell View > objectValue.[property]
,例如
注意:强烈建议将字典映射到自定义类(从class
继承NSObject
是强制性的)
答案 1 :(得分:0)
如果您将列标识符设置为与字典中的键匹配,则应该能够执行此操作:
private func tableView(tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cellView = voucherTableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView
cellView.textField!.stringValue = tempArray[row][tableColumn.identifier] as! String
return cellView
}