在Swift 4中,当我尝试通过单击其标题对列进行排序时,没有任何反应:
这是我的代码:
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()
}
}
import Cocoa
class Person: NSObject {
var name: String
var age: String
init(name: String, age: String) {
self.name = name
self.age = age
}
}
当我跑步时,我收到了这条消息:Unknown Window class (null) in Interface Builder file, creating generic Window instead"
。
当我通过点击其标题对列进行排序时,我收到了有关Person
类的消息:this class is not key value coding-compliant for the key name
。
我认为this question的2016年评论(复制此代码的部分内容)可能有所帮助。
编辑:解决方案是将@objcMembers
添加到Person
课程中(请参阅下面的评论)。
谢谢。