Swift/Cocoa:对列的数据进行排序
在Swift 4中,当我试图通过单击列标题对列进行排序时,什么也没有发生: 这是我的密码:Swift/Cocoa:对列的数据进行排序,swift,sorting,cocoa,nstableview,Swift,Sorting,Cocoa,Nstableview,在Swift 4中,当我试图通过单击列标题对列进行排序时,什么也没有发生: 这是我的密码: import Cocoa class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate { var persons = [Person(name: "John", age: "30"), Person(name: "Mike", age: "25"), Person(name: "Mary", ag
import Cocoa
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
var persons = [Person(name: "John", age: "30"), Person(name: "Mike", age: "25"), Person(name: "Mary", age: "28")]
@IBOutlet weak var tableView: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfRows(in tableView: NSTableView) -> Int {
return persons.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if tableColumn == tableView.tableColumns[0] {
let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "nameCellView"), owner: nil) as? NSTableCellView
cell?.textField?.stringValue = persons[row].name
return cell
}
if tableColumn == tableView.tableColumns[1] {
let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "ageCellView"), owner: nil) as? NSTableCellView
cell?.textField?.stringValue = persons[row].age
return cell
}
return nil
}
// I think I have to change something here
func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
let personsAsMutableArray = NSMutableArray(array: persons)
personsAsMutableArray.sort(using: tableView.sortDescriptors)
persons = personsAsMutableArray as! [Person]
tableView.reloadData()
}
}
当我运行时,我有这样一条消息:
接口生成器文件中的未知窗口类(null),创建通用窗口“
。
当我通过单击列的标题对列进行排序时,我收到了一条有关人员
类的消息:此类不符合键值编码的键名
我认为2016年的评论(这部分代码是从中复制的)可能会有所帮助
编辑:解决方案是将@objcMembers
添加到Person
类中(请参见下面的注释)
谢谢。谢谢!我将
@objcMembers
添加到个人
类中。
import Cocoa
class Person: NSObject {
var name: String
var age: String
init(name: String, age: String) {
self.name = name
self.age = age
}
}