我知道以前有人问过这个问题,但我还没有找到解决方案。我正在尝试保存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
}