3

我有两个要同步的 NSTextView。我正在使用ReactiveCocoa从它们的可可绑定中生成 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;

但随后编译器说不:Assignment to read only property. 看起来这应该是直截了当的,所以我在这里做错了什么?如何使用自己的终端创建类似 RACChannel 的绑定?

4

1 回答 1

10

两个RACChannelTerminals需要互相订阅。

[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 回答