2015-10-17 50 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

相關問題