Search code examples
objective-cnsuserdefaultsuiswitchreactive-cocoa

Bind UISwitch's state to NSUserDefaults with ReactiveCocoa


How can I bind UISwitch.on with the value for a key in NSUserDefaults?


Solution

  • You can bind them (two-way binding) by following:

    RACChannelTerminal *switchTerminal = self.someSwitch.rac_newOnChannel;
    RACChannelTerminal *defaultsTerminal = [[NSUserDefaults standardUserDefaults] rac_channelTerminalForKey:@"someBoolKey"];
    
    [switchTerminal subscribe:defaultsTerminal];
    [defaultsTerminal subscribe:switchTerminal];
    

    The switch's on state starts with the value from the user defaults or NO.