3

У меня есть два NSTextViews, которые я хочу синхронизировать вместе. Я использую ReactiveCocoa для генерации RACChannelTerminals из их привязок к какао.Как связать два 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 к моим собственным терминалам?

ответ

10

Два RACChannelTerminal s должны быть подписаны друг на друга.

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

Начальное значение будет проигнорировано, синхронизация не будет выполняться до тех пор, пока не будет введен новый текст.

EDIT:

, чтобы они изначально синхронизируются, я сделал это:

NSString *initialText = textView1.stringValue; 

// ... setup channel terminals 

[[terminal1 startWith:initialText] subscribe:terminal2]; 
[[terminal2 startWith:initialText] subscribe:terminal1]; 
+0

Есть ли способ, чтобы вручную заставить одноразовую синхронизировать после того как они подписаны друг с другом? – zakdances

+0

Я обновил свой ответ, чтобы показать одно возможное решение для начальной синхронизации. –

Смежные вопросы