2011-03-14 34 views
0

当对象的子对象被绑定到更改时,我遇到NSTextField(或潜在的任何NSControl)更新它的可见属性的问题。当子对象更改时更新绑定NSTextField

我觉得代码将简化问题的理解(简化这个例子):

// 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 

当我在表中选择一个团队,一个电话将转入转到Web服务器以获取团队信息,并且适当更新子对象(包括团队领导)。然而,直到我选择另一个团队,然后再回到所选的第一个团队,团队领导的名字和姓氏才会在UI中更新。

我知道发生了什么,绑定的文本字段没有被通知MyPerson对象的更改。我不知道如何使MyPerson对象KVC/KVO符合此目的。

我试着强制使用willChangeValueForKey和didChangeValueForKey。尽管事实并非如此,但我认为这是不正确的做法。

我尝试过直接绑定到对象而不是使用中介方法(teamLeadFirstName getter),但那也不起作用。我知道数据正在来自服务器的呼叫中填充到模型中,因为我可以在调试器中确认它。所以我认为我的问题只是KVO的一部分。

目标仅为10.6,因此不涉及遗留问题。

有关如何解决此问题的任何帮助或建议将非常感激。

回答

0

我的部分愚蠢的错误。我绑定了一个不符合KVO的子对象的类方法。

愚蠢,愚蠢的错误。

相关问题