Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift/Cocoa:对列的数据进行排序_Swift_Sorting_Cocoa_Nstableview - Fatal编程技术网

Swift/Cocoa:对列的数据进行排序

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

在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()
}
}

当我运行时,我有这样一条消息:
接口生成器文件中的未知窗口类(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
}
}