Обновление связанного NSTextField при изменении дочернего объекта - PullRequest
0 голосов
/ 14 марта 2011

У меня проблемы с NSTextField (или, возможно, с любым NSControl), обновляющим его видимые свойства, когда дочерний объект объекта связан с изменениями.

Я думаю, что код упростит понимание проблемы (упрощено дляэтот пример):

// Team object contains a team leader of object type MyPerson

@interface MyTeam : NSObject {

   MyPerson * teamLeader;
   NSString * teamName;
}

@property (readwrite, retain) MyPerson * teamLeader;
@property (readwrite, copy) NSString * teamName;

-(NSString *)teamLeaderFirstName;
-(NSString *)teamLeaderLastName;

// In the implementation file return the first name and last name
// of the teamLeader

@implementation MyTeam

@synthesize teamLeader
@synthesize teamName;

-(NSString *)teamLeaderFirstName {
    return [[self teamLeader] teamLeaderFirstName;
}

-(NSString *)teamLeaderLastName {
    return [[self teamLeader] teamLeaderLastName;
}

Привязки:

NSArrayController --> NSArray of MyTeam objects
NSTableView --> NSArrayController
NSTextField --> NSArrayController --> Selected Item --> Team Name
NSTextField --> NSArrayController --> Selected Item --> Lead First Name
NSTextField --> NSArrayController --> Selected Item --> Lead Last Name

Когда я выбираю команду в таблице, на веб-сервер отправляется вызов для получения информации о команде и дочернем элементе.объекты (в том числе руководитель группы) обновляются соответствующим образом.Однако имя и фамилия руководителя группы не обновляются в пользовательском интерфейсе до тех пор, пока я не выберу другую команду и не вернусь к первой выбранной команде.

Я знаю, что происходит, связанные текстовые поля не уведомляются оизменения в объекте MyPerson.Чего я не знаю, так это как сделать объект MyPerson KVC / KVO-совместимым для этой цели.

Я попытался принудительно использовать willChangeValueForKey и didChangeValueForKey.Несмотря на то, что это не сработало для меня, я думаю, что это неправильный способ сделать это.

Я попытался привязать напрямую к объекту вместо использования промежуточного метода (getLeadFirstName getter), но это не помогло.тоже не работает.Я знаю, что данные заполняются в модели при вызове с сервера, потому что я могу подтвердить это в отладчике.Поэтому я считаю, что моя проблема - это только часть КВО.

Цель - только 10,6, поэтому никаких проблем, связанных с наследством, не будет.

Любая помощь или предложения по ее решению будут очень признательны.

1 Ответ

0 голосов
/ 31 марта 2011

глупая ошибка с моей стороны. Я связывался с методом класса, который не был совместим с KVO в дочернем объекте.

Глупая, глупая ошибка.

...