3

一緒に同期したい 2 つの NSTextView があります。ReactiveCocoaを使用して、cocoa バインディングから RACChannelTerminals を生成しています。

RACChannelTerminal *terminal1 = [textView1 rac_channelToBinding:@"attributedString" options:@{ NSContinuouslyUpdatesValueBindingOption: @(YES) }];
RACChannelTerminal *terminal2 = [textView2 rac_channelToBinding:@"attributedString" options:@{ NSContinuouslyUpdatesValueBindingOption: @(YES) }];

RACChannel当然、次のステップは を作成し、両方の端子を接続するだけだと思いました。

RACChannel *channel = [RACChannel new];
channel.leadingTerminal = terminal1;
channel.followingTerminal = terminal2;

しかし、コンパイラは nope: と言いますAssignment to read only property。これは簡単なように思えますが、ここで何が間違っているのでしょうか? 自分の端末で RACChannel のようなバインディングを作成するにはどうすればよいですか?

4

1 に答える 1

10

2 つRACChannelTerminalの は相互にサブスクライブする必要があります。

[terminal1 subscribe:terminal2];
[terminal2 subscribe:terminal1];

初期値は無視され、新しいテキストが入力されるまで同期は行われません。

編集:

それらを最初に同期させるために、私はこれを行いました:

NSString *initialText = textView1.stringValue;

// ... setup channel terminals

[[terminal1 startWith:initialText] subscribe:terminal2];
[[terminal2 startWith:initialText] subscribe:terminal1];
于 2013-09-19T20:20:16.080 に答える