/ / Програмне оновлення TableView, яке регулюється прив'язками какао - какао, nstableview, cocoa-bindings

Програмоване оновлення TableView, яке регулюється какао-прив'язками - какао, nstableview, какао-прив'язка

Я досить новий для obj-c і какао, тому, будь ласка, майте мене:

У мене є NSTableView створений з какао прив'язкиякий працює так, як і очікувалося, з простими -add -remove і т.д. методи, надані екземпляр NSArrayController в моєму перо. Я хотів би програмно додати об'єкти до масиву, який надає вміст для цього контролера (і, отже, для перегляду таблиці), а потім відповідно оновити вигляд.

Я поточний є робочий метод для додавання нового об'єкта до масиву (перевірено NSLog), але я не можу "з'ясувати, як оновити таблицю подання.

Тому: Як оновити перегляд таблиць? (тобто після того, як я програмно додав об'єкти до свого масиву). Я, по суті, після деякого коду перегляду, як [переглядати reloadData] в клей-коді, але я хочу, щоб він працював з прив'язками, які я маю.

Чи існує KVC / KVO відповідне рішення цієї проблеми?

Деталі коду: AppController.h

@interface AppController : NSObject

@property NSMutableArray *clientsArray;

-(IBAction)addClientFooFooey:(id)sender;

@end

AppController.m (зверніть увагу, у мене також немає відповідного методу init тут)

@implementation AppController
...

-(IBAction)addClientFooFooey:(id)sender{
[self.clientsArray addObject:[[Client alloc] initWithFirstName: @"Foo" andLastName:@"Fooey"]];

//Need some code to update NSTableView here

}

@end

Клієнт.h просто визначає два властивості: firstName і lastName. 2 стовпці NSTableView в моєму файлі mainmenu.nib належним чином прив'язані до цих властивостей через контролер масиву, прив'язаний до мого примірника AppController.

На бічній ноті / як альтернатива. Як я міг би додати функціональність до існуючого методу NSArrayController -add, тобто щось на зразок: -addWithFirstName: іLastName і ще мати цю сумісність з прив'язками?

Відповіді:

1 для відповіді № 1

У вас є два основних варіанти для цього, якщо ваш контролер масиву пов'язаний з цим clientsArray.

Перший спосіб полягає в простому використанні контролера масиву addObject: замість додавання об'єктів безпосередньо до clientsArray.

Інший спосіб - зберегти свій струм addClientFooFooey: метод, але оберніть існуючий код цими двома рядками:

[self willChangeValueForKey:@"clientsArray"];

[self didChangeValueForKey@"clientsArray"];

Це повідомляє системі KVO, що ви вносите зміни до масиву, щоб він знову пішов на нього.

Перший варіант є найпростішим, але якщо з якихось причин потрібно безпосередньо оновити масив, нехай KVO знає, що ви це робите.