NSTableView 显示每一行中的最后一个对象

NSTableView showing last object in every row

我正在用头撞墙试图解决这个问题。我有一个非常简单的应用程序,其中包含 class PersonNSTableViewNSArrayController "PersonController".

人:

class Person: NSObject {
    var firstName = ""
    var lastName = ""
}

个人控制器:

Table查看:

ViewController:

class ViewController: NSViewController {
    @IBOutlet var personController: NSArrayController!
    override func viewDidLoad() {
        super.viewDidLoad()
        let person = Person()
        var people = [Person]()
        person.firstName = "John"
        person.lastName = "Snow"
        people.append(person)
        person.firstName = "Kate"
        person.lastName = "Dawson"
        people.append(person)
        person.firstName = "Tom"
        person.lastName = "Anderson"
        people.append(person)
        personController.addObjects(people)
    }
    override var representedObject: AnyObject? {
        didSet {}
    }
}

输出:

我在这里做错了什么?我已经阅读了很多 SO 帖子和大量教程等,据我所知,我做的是正确的,但我终其一生都无法让它发挥作用。

您只有一个 Person 对象。当您将它附加到数组时,不会生成副本。该数组仅包含对该对象的引用。您将同一对象追加三次,因此该数组包含对该对象的三个引用。

每次更改 PersonfirstNamelastName 时,您都会更改该对象的属性。因此,在数组的每个索引处,table 找到一个为其名称属性设置了最后一个值的对象。

您需要创建三个单独的 Person 对象。

另外,如果您希望 Person 的属性与键值观察兼容并因此与绑定兼容,则需要将 Person 的属性标记为 dynamic