Я досить новий для 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 знає, що ви це робите.