我在使用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
当我在表格中选择一个团队时,会呼叫一个Web服务器来获取团队信息,并且子对象(包括团队负责人)会得到适当的更新。但是,在我选择另一个团队然后回到所选的第一个团队之前,团队领导的姓名不会在UI中更新。
我知道发生了什么,绑定的文本字段没有被通知MyPerson对象的更改。我不知道的是如何使MyPerson对象KVC / KVO符合此目的。
我尝试过强制使用willChangeValueForKey和didChangeValueForKey。尽管这对我不起作用,但我认为这是错误的做法。
我尝试直接绑定到对象而不是使用中间方法(teamLeadFirstName getter),但这也不起作用。我知道数据正在服务器调用的模型中填充,因为我可以在调试器中确认它。所以我认为我的问题只是KVO部分。
目标仅为10.6,因此不涉及遗留问题。
非常感谢任何有关如何解决此问题的帮助或建议。
答案 0 :(得分:0)
我这个愚蠢的错误。我绑定到子对象中不符合KVO的类方法。
愚蠢,愚蠢的错误。