Swift NSTableView显示每行中的最后一个对象
我正拼命想弄明白这件事。我有一个非常简单的应用程序,有一个classSwift 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
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的出口
- 属性检查器>对象控制器>类名=人
- 属性检查器>表视图>内容模式=基于单元格
- 绑定到具有控制器键: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!!真不敢相信我在那上面浪费了这么多时间!谢谢你,伙计!