0

次のようにバインディングを構成します。

@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];

起動後、テキスト フィールドに「Hello」という文字列が表示されるので、それを「World」に変更して Return キーを押します。ただし、オブジェクト コントローラのコンテンツのみが更新されます。

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

NSObjectControllerでは、バインドされているローカル プロパティを更新するように を構成するにはどうすればよいでしょうか。

4

1 に答える 1

0

解決しました!ジェイコブ・ゴルバンに感謝:

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];
于 2016-11-20T19:15:38.797 に答える