Swift 要在NStableview中打开plist吗

Swift 要在NStableview中打开plist吗,swift,plist,nstableview,Swift,Plist,Nstableview,几天来,我一直试图在NSTableView中显示plist文件。我读了很多书,但到目前为止只找到了iOS的说明。我的问题是个人的价值观​​不在NStableView中单独显示。始终仅显示单元格中的整个plist文件 我希望有人能帮助我,因为我已经走不远了。我还是斯威夫特大学的新生 我上传了我的Plist,如果有人能告诉我错误在哪里 } 我希望有人能帮助我。首先,这是斯威夫特。包括下划线字符在内的变量名既丑陋又客观 你的工作流程是错误的。objectValueFor经常为每一行调用一次,并且应该只

几天来,我一直试图在NSTableView中显示plist文件。我读了很多书,但到目前为止只找到了iOS的说明。我的问题是个人的价值观​​不在NStableView中单独显示。始终仅显示单元格中的整个plist文件

我希望有人能帮助我,因为我已经走不远了。我还是斯威夫特大学的新生

我上传了我的Plist,如果有人能告诉我错误在哪里

}


我希望有人能帮助我。

首先,这是斯威夫特。包括下划线字符在内的变量名既丑陋又客观

你的工作流程是错误的。objectValueFor经常为每一行调用一次,并且应该只返回给定行/列的对象。一次又一次地读取相同的数据是可怕的

在viewDidLoad中加载数据一次,然后将Plist直接解码到类中。类需要能够绑定这些值

@objcMembers
class Job : NSObject, Decodable {
    dynamic var n, schwarz, cyan, magenta, gelb, lightc, lightm : String
}
在objectValueFor中,仅返回该行的项

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
     return jobs[row]
}
其他委托方法包括

func numberOfRows(in tableView: NSTableView) -> Int {
    return jobs.count
}

func tableViewSelectionDidChange(_ notification: Notification) {
    let selectedRow = tableView.selectedRow
    if selectedRow == -1 {
       print("Nothing selected")
    } else {
      print("Row \(selectedRow) selected")
    }
}
必须将值绑定到文本字段。打开界面生成器,⌃⇧-单击表格视图中最左侧的文本字段表格视图单元格,选择表格视图单元格,然后按⌥⌘7要打开绑定检查器,请单击值下方的三角形,选中模型键路径文本字段write objectValue中的“绑定到表格单元格视图”复选框。n。将行中的其他文本字段绑定到相应的属性objectValue.schwarz等

你可以删除


谢谢但现在它显示了一个错误:let data=try!DatacontentsOf:url我在编辑答案的同时添加了一个!在前一行的末尾。谢谢。现在它在下一行中显示一个错误。乔布斯=试试!PropertyListDecoder.decode[Job].self,from:data请使用我的建议将数据源数组声明为var jobs=[Job]。结构应该以单数形式命名。每个实例代表一个作业。我发现了问题。我把结构代码放错行了。现在它开始显示->tableview.ViewController.Jobn:13589,schwarz:1.219,青色:0.666,品红色:0.765,gelb:3.107,lightc:8.106,lightm:7.965
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
     return jobs[row]
}
func numberOfRows(in tableView: NSTableView) -> Int {
    return jobs.count
}

func tableViewSelectionDidChange(_ notification: Notification) {
    let selectedRow = tableView.selectedRow
    if selectedRow == -1 {
       print("Nothing selected")
    } else {
      print("Row \(selectedRow) selected")
    }
}
var n : String? = nil; // n
var schwarz : String? = nil; // Schwarz
var cyan : String? = nil; // Cyan
var magenta : String? = nil; // Magenta
var gelb : String? = nil; // Gelb
var lightc : String? = nil; // Light Cyan
var lightm : String? = nil; // Light Magenta

let AUTO_PLIST_JOBS_PATH = Bundle.main.path(forResource: "Jobs", ofType: "plist")

let AUTO_PLIST_JOBS_KEY_N = "n"   // n
let AUTO_PLIST_JOBS_KEY_SCHWARZ = "schwarz"   // Schwarz
let AUTO_PLIST_JOBS_KEY_CYAN = "cyan"   // Cyan
let AUTO_PLIST_JOBS_KEY_MAGENTA = "magenta"   // Magenta
let AUTO_PLIST_JOBS_KEY_GELB = "gelb"   // Gelb
let AUTO_PLIST_JOBS_KEY_LIGHTC = "lightc"   // Light Cyan
let AUTO_PLIST_JOBS_KEY_LIGHTM = "lightm"   // Light Magenta

func allJobss() -> [Jobs]{

    if _jobss.count > 0 {
        return _jobss
    }

    if let allDatas = NSArray(contentsOfFile: AUTO_PLIST_JOBS_PATH!) {

        for dict in allDatas {
            guard let dict = dict as? [String: AnyObject] else {continue}

            let jobs = Jobs()
            jobs.n = dict[AUTO_PLIST_JOBS_KEY_N] as? String // n
            jobs.schwarz = dict[AUTO_PLIST_JOBS_KEY_SCHWARZ] as? String // Schwarz
            jobs.cyan = dict[AUTO_PLIST_JOBS_KEY_CYAN] as? String // Cyan
            jobs.magenta = dict[AUTO_PLIST_JOBS_KEY_MAGENTA] as? String // Magenta
            jobs.gelb = dict[AUTO_PLIST_JOBS_KEY_GELB] as? String // Gelb
            jobs.lightc = dict[AUTO_PLIST_JOBS_KEY_LIGHTC] as? String // Light Cyan
            jobs.lightm = dict[AUTO_PLIST_JOBS_KEY_LIGHTM] as? String // Light Magenta
            _jobss.append(jobs)
        }
    }
    return _jobss
}