NSTableView 显示每一行中的最后一个对象
NSTableView showing last object in every row
我正在用头撞墙试图解决这个问题。我有一个非常简单的应用程序,其中包含 class Person
、NSTableView
和 NSArrayController
"PersonController".
人:
class Person: NSObject {
var firstName = ""
var lastName = ""
}
个人控制器:
- 已将插座添加到 ViewController
- 属性检查器 > 对象控制器 > Class 姓名 = 人
Table查看:
- 属性检查器 > Table 视图 > 内容模式 = 基于单元格
- 1st Table 列绑定到具有控制器键的个人控制器:arrangedObjects 和模型键路径:firstName
- 第二 Table 列绑定到具有控制器键的个人控制器:arrangedObjects 和模型键路径:lastName
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
对象。当您将它附加到数组时,不会生成副本。该数组仅包含对该对象的引用。您将同一对象追加三次,因此该数组包含对该对象的三个引用。
每次更改 Person
的 firstName
和 lastName
时,您都会更改该对象的属性。因此,在数组的每个索引处,table 找到一个为其名称属性设置了最后一个值的对象。
您需要创建三个单独的 Person
对象。
另外,如果您希望 Person
的属性与键值观察兼容并因此与绑定兼容,则需要将 Person
的属性标记为 dynamic
。
我正在用头撞墙试图解决这个问题。我有一个非常简单的应用程序,其中包含 class Person
、NSTableView
和 NSArrayController
"PersonController".
人:
class Person: NSObject {
var firstName = ""
var lastName = ""
}
个人控制器:
- 已将插座添加到 ViewController
- 属性检查器 > 对象控制器 > Class 姓名 = 人
Table查看:
- 属性检查器 > Table 视图 > 内容模式 = 基于单元格
- 1st Table 列绑定到具有控制器键的个人控制器:arrangedObjects 和模型键路径:firstName
- 第二 Table 列绑定到具有控制器键的个人控制器:arrangedObjects 和模型键路径:lastName
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
对象。当您将它附加到数组时,不会生成副本。该数组仅包含对该对象的引用。您将同一对象追加三次,因此该数组包含对该对象的三个引用。
每次更改 Person
的 firstName
和 lastName
时,您都会更改该对象的属性。因此,在数组的每个索引处,table 找到一个为其名称属性设置了最后一个值的对象。
您需要创建三个单独的 Person
对象。
另外,如果您希望 Person
的属性与键值观察兼容并因此与绑定兼容,则需要将 Person
的属性标记为 dynamic
。