Swift / Cocoa:对列

时间:2017-09-29 12:13:44

标签: swift sorting cocoa nstableview

在Swift 4中,当我尝试通过单击其标题对列进行排序时,没有任何反应:

tableView

这是我的代码:

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
}
}

tableColumAttributes tableColumnAttributes2

当我跑步时,我收到了这条消息: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课程中(请参阅下面的评论)。

谢谢。

0 个答案:

没有答案