Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 NSTableView显示每行中的最后一个对象_Swift_Nstableview_Cocoa Bindings_Nsarraycontroller - Fatal编程技术网

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

Swift NSTableView显示每行中的最后一个对象,swift,nstableview,cocoa-bindings,nsarraycontroller,Swift,Nstableview,Cocoa Bindings,Nsarraycontroller,我正拼命想弄明白这件事。我有一个非常简单的应用程序,有一个classPerson、一个NSTableView和一个NSArrayController“PersonController” 人: class Person: NSObject { var firstName = "" var lastName = "" } 人事控制员: class ViewController: NSViewController { @IBOutlet var personControlle

我正拼命想弄明白这件事。我有一个非常简单的应用程序,有一个class
Person
、一个
NSTableView
和一个
NSArrayController
“PersonController”

人:

class Person: NSObject {
    var firstName = ""
    var lastName = ""
}
人事控制员:

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 {}
    }
}
  • 添加了ViewController的出口
  • 属性检查器>对象控制器>类名=人
TableView:

  • 属性检查器>表视图>内容模式=基于单元格
  • 绑定到具有控制器键:arrangedObjects和模型键路径:firstName的Person控制器的第一个表列
  • 第二个表列绑定到具有控制器键:arrangedObjects和模型键路径:lastName的Person控制器
视图控制器:

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 {}
    }
}
输出:


我做错了什么?我已经阅读了很多帖子和大量教程等,从我所能看出我做得很正确,但我一辈子都不能让它工作。

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

每次更改一个人的
名字和
姓氏时,您都在更改该对象的属性。因此,在数组的每个索引处,表会找到一个对象,该对象的名称属性设置了最后一个值

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


另一方面,如果希望
Person
的属性符合键值,从而与绑定兼容,则需要将其标记为
dynamic

Face palm!!真不敢相信我在那上面浪费了这么多时间!谢谢你,伙计!