2011-03-14 37 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的子對象的類方法。

愚蠢,愚蠢的錯誤。

相關問題