0

나는 다음과 같은 바인딩을 구성합니다NSObjectController가 바인딩 된 모델 속성을 업데이트하지 않는 이유는 무엇입니까?

@property (nonatomic, copy) NSString *name; 
@property (nonatomic, strong) NSObjectController *controller; 

... 

self.controller = [[NSObjectController alloc] initWithContent:nil]; 
[self.controller bind:NSContentObjectBinding toObject:self 
      withKeyPath:@"name" options:nil]; 
[self.controller addObject:@"Hello"]; 

... 

NSTextField *textField = [NSTextField textFieldWithString:nil]; 
[textField bind:NSValueBinding toObject:self.controller 
    withKeyPath:@"content" options:nil]; 

텍스트 필드가 출시 후 문자열 "안녕하세요"를 보여주고, 그때가 "세계를"변경 및 반환을했다. 그러나, 객체 컨트롤러의 내용이 업데이트됩니다 :

[controller.content isEqualToString:@"World"]; // YES 
     [self.name isEqualToString:@"World"]; // NO — WHY? 
     [self.name isEqualToString:@"Hello"]; // YES 

그래서 어떻게이 바인딩되는 지역 속성을 업데이트 할 NSObjectController을 구성해야합니까?

+1

자기에게 바인딩하는 대신 initWithContent : self? –

+0

이것이 순환을 유지하게 될 것이라고 생각하지만 해결책은 매우 가깝습니다. 내 대답을 확인해 주시겠습니까? 고마워, 너 정말 도와 줬어! – Stream

답변

0

해결! Jacob Gorban에게 감사 :

self.name = @"Hello"; 
self.controller = [[NSObjectController alloc] initWithContent:nil]; 
[self.controller bind:NSContentObjectBinding toObject:self 
      withKeyPath:@"self" options:nil]; 

... 

NSTextField *textField = [NSTextField textFieldWithString:nil]; 
[textField bind:NSValueBinding toObject:self.controller 
    withKeyPath:@"selection.name" options:nil];