2015-10-17 89 views
1

我正在试图弄清楚这一点,我的头靠在墙上。我有一个非常简单的应用程序,类别为PersonNSTableViewNSArrayController“PersonController”。NSTableView显示每一行中的最后一个对象

人:

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

PersonController:

  • 新增出口的ViewController
  • 属性检查员>对象控制器>类名称=人

TableView中:

  • 属性检查员>表视图>内容模式=基于细胞的
  • 第一表绑定到人控制器,控制器密钥柱:arrangedObjects和型号关键路径:名
  • 第二表列结合于人控制器与控制键: arrangedObjects和型号关键路径:名字

的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 {} 
    } 
} 

输出:

enter image description here

我在做什么错在这里?我读过许多SO帖子和大量的教程等,从我可以告诉我做得正确,但我不能为我的生活得到这个工作。

回答

2

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

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

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

作为一个单独的问题,如果您希望它们符合Key-Value-Observing并兼容Bindings,则需要将Person的属性标记为dynamic

+0

脸掌!我不敢相信我浪费了那么多时间!谢了哥们! – doovers

相关问题