當對象的子對象被綁定到更改時,我遇到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,因此不涉及遺留問題。
有關如何解決此問題的任何幫助或建議將非常感激。