2015-10-17 3 views
1

Я стучу головой о стену, пытаясь понять это. У меня очень простое приложение с классом Person, NSTableView и NSArrayController «PersonController».NSTableView, показывающий последний объект в каждом ряду

лицо:

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

PersonController:

  • выходе Добавлена ​​ViewController
  • Атрибуты Inspector> Controller Object> Class Name = Person

TableView:

  • Attributes Inspector> Table View> Mode Content = Cell на основе
  • 1-й столбца таблицы, связанный с Person Controller с контроллером ключом: arrangedObjects и путь ключа Модели: ПгвЬЫат
  • 2-ем столбец таблицы, связанный с Person Controller с контроллером ключом: 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 {} 
    } 
} 

Выход:

enter image description here

Что я здесь делаю неправильно? Я прочитал много сообщений SO и тонну учебных пособий и т. Д., И из того, что я могу сказать, я делаю это правильно, но я не могу на всю жизнь заставить меня работать.

ответ

2

У вас есть только один объект Person. Когда вы добавляете его в массив, это не делает копию. Массив просто содержит ссылку на этот один объект. Вы добавляете один и тот же объект три раза, поэтому массив содержит три ссылки на один объект.

Каждый раз, когда вы меняете этот PersonfirstName и lastName, вы меняете свойства одного объекта. Таким образом, в каждом индексе массива таблица обнаруживает, что один объект с последними значениями, установленными для его свойств имени.

Вам необходимо создать три отдельных объекта Person.

В качестве отдельного вопроса вам необходимо пометить свойства Person как dynamic, если вы хотите, чтобы они были совместимыми с ключевыми значениями и, следовательно, совместимыми с Bindings.

+0

Face palm !! Не могу поверить, что я потратил столько времени на это! Спасибо друг! – doovers

Смежные вопросы