保存UISwitch状态-目标C



我知道以前有人问过这个问题,但我还没有找到解决方案。我正在尝试保存UISwitch状态,以便无论我进入哪个VC,该开关状态都仍然处于活动状态。然而,每当我离开VC开关时,它就会关闭。目前,这是我用来保存开关状态的代码:

- (IBAction)tvpSwitch:(UISwitch *)sender {
    if (sender.isOn) {
    [[NSUserDefaults standardUserDefaults]setObject:@"on" forKey:@"tvpSwitch"];
    [[NSUserDefaults standardUserDefaults]synchronize];

}
else {
    [[NSUserDefaults standardUserDefaults]setObject:@"off" forKey:@"tvpSwitch"];
    [[NSUserDefaults standardUserDefaults]synchronize];
}}

然后我把这是任何VC视图WillAppear:

-(void)viewWillAppear:(BOOL)animated
{
if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"tvpSwitch"]isEqualToString:@"on"]) 
{
      (sender.isOn=YES);
}
else
{
      (sender.isOn=NO);
}}

它还在viewWillAppear方法中标记:"使用未声明的标识符'sender'。"我通常尝试使用参考指南,但我很难确定哪里出了问题。任何帮助都会很棒!谢谢

就像您有一个IBAction一样,我想您通过Interface Builder创建了UISwitch。如果是这种情况,请从UISwitch创建一个IBOutlet,然后始终引用它。

在第一个代码片段中,sender是在IBAction方法中传递的参数,该方法是对UISwitch的引用。

在其他视图控制器中,您需要一些对UISwitch的引用,但如果您只想检查该状态而不能在UI中更改它,只需从NSUserDefaults中获取并使用它即可。

顺便说一下,有指定的NSUserDefaults保存BOOL类型的方法。

- (IBAction)tvpSwitch:(UISwitch *)sender {
   [[NSUserDefaults standardUserDefaults] setBool:sender.isOn forKey:@"tvpSwitch"];
}

BOOL switchState;
-(void)viewWillAppear:(BOOL)animated
{
    switchState = [[NSUserDefaults standardUserDefaults] boolForKey:@"tvpSwitch"];
   // do something with switchState
}

最新更新