рдпрджрд┐ рдореИрдВ -setStringValue:
рдпрд╛ -setAttributedStringValue:
рдорд╛рдзреНрдпрдо рд╕реЗ -setStringValue:
NSTextField
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ NSControlTextDidChangeNotification
рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ -rac_textSignal
рдЬреАрдд рдЧрдП 'рдпрд╛ рддреЛ рдкрд░рд┐рд╡рд░реНрддрди рдЙрдард╛рдУред рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкрд╛рда рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛред
рдЖрд╕рд╛рди рдлрд┐рдХреНрд╕ рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдХреЙрд▓ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -rac_signalForSelector:
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ( NSControlTextDidChangeNotification
рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░?
рдпрд╣рд╛рдВ AppKit рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░рддрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдмрдЧ рдирд╣реАрдВред рдпрд╣ рдЕрдЬреАрдм рд╣реЛрдЧрд╛, IMO, rac_textSignal
рдХреЗ рд▓рд┐рдП рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдо рддреМрд░ рдкрд░ рдРрд╕реА рдШрдЯрдирд╛рдПрдВ рдЬреЛ рджреГрд╢реНрдп рдкрд░рдд рддрдХ рдлреИрд▓рддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ "рдЕрдВрддрд┐рдо" рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рдпрд╛ рдЙрди рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ?
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг: рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ рд╕рд╛рдлрд╝ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдлреЙрд░реНрдо рд╣реИ, рдХреНрд▓реАрдпрд░ рд╕реЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ stringValue
рд╣рд░ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдкрд░ @""
ред рдореИрдВ рдХреБрдЫ рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП rac_textSignal
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдХреНрд▓реАрдпрд░ рд╣реЛрдиреЗ рдкрд░ рд╕рддреНрдпрд╛рдкрди рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ -rac_textSignal
рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдЙрдард╛рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ NSControlTextDidChangeNotification
рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рдирдХ рдмрд╛рдд рд╣реИ: рдЯреНрд░реЛрд▓рдлреЗрд╕:
MVVM рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди _view model_ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рди рдХрд┐ рджреГрд╢реНрдп рдореЗрдВред рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рджреЛ-рддрд░рдлрд╝рд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реЛрдЧреАред рдлрд┐рд░, рд╕реНрдкрд╖реНрдЯ рдмрдЯрди рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рд╣реИ: рдирд┐рдЦрд░ рдЙрдарддреА рд╣реИред
MVC рдХрд╛рдлреА рд╣рдж рддрдХ рдПрдХ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдмрд╕ рдПрдХ рдордзреНрдпрд╕реНрде рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рдореЙрдбрд▓ рдХреЗ рдмрдЬрд╛рдпред
рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рд╡рд╛рд▓ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!
FWIW, рднрд▓реЗ рд╣реА рдХреЛрдХреЛ рдмрд┐рдВрджрд┐рдВрдЧреНрд╕ тДв рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рджреЛ-рддрд░рдлрд╛ рдмрд╛рдБрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП RACChannel
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИрдВред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдмрдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ @indragiek рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
рдХрд╣реЛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ NSString* name
ред
рдЕрдкрдиреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ, рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб рдХреЛ рд╡реНрдпреВ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╕рдордп рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд:
[[RACSignal merge:@[self.nameField.rac_textSignal, RACObserve(self.nameField, text)]]<br i="9"/>
subscribeNext:^(NSString* text){<br i="10"/>
self.viewModel.name = text;<br i="11"/>
}];`
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдм рднреА рдкрд╛рда рд╕рдВрдХреЗрдд рдЖрдЧ рдФрд░ рдкрд╛рда рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗред
@startupthekid рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорджрдж рдХрд░рддрд╛ рд╣реИред
@startupthekid рдзрдиреНрдпрд╡рд╛рдж рдПрдХ рдЯрди!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдмрдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ @indragiek рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
рдХрд╣реЛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░
NSString* name
редрдЕрдкрдиреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ, рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб рдХреЛ рд╡реНрдпреВ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╕рдордп рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд:
[[RACSignal merge:@[self.nameField.rac_textSignal, RACObserve(self.nameField, text)]]<br i="9"/> subscribeNext:^(NSString* text){<br i="10"/> self.viewModel.name = text;<br i="11"/> }];`
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдм рднреА рдкрд╛рда рд╕рдВрдХреЗрдд рдЖрдЧ рдФрд░ рдкрд╛рда рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗред