我有UITableView
。只有两个部分。在第一部分中只有两行。第一行只保留一个开关。如果此开关打开,则第二行显示。
现在我要保存交换机的状态。为此,我使用NSUserDefaults
我已添加到与交换机关联的操作的代码。开关(中断器)的动作如下:
-(IBAction)accioInterruptor:(id)sender{
NSUserDefaults *pepe=[NSUserDefaults standardUserDefaults];
[pepe setBool:interruptor.isOn forKey:@"interruptor"];
[pepe synchronize];
NSLog(@"Defaults interruptor %d", [[NSUserDefaults standardUserDefaults]boolForKey:@"interruptor"]);
NSLog(@"Interruptor isOn: %d", interruptor.isOn);
[infoAndSettingsTable beginUpdates];
[infoAndSettingsTable reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
[infoAndSettingsTable endUpdates];}
我似乎能够以某种方式通过在cellForRowAtIndexPath方法中添加单元格定义中的状态来保存和恢复交换机的状态,如下所示:
if (indexPath.section==0 && indexPath.row==0){
[cell.contentView addSubview:self.interruptor];
[interruptor setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"interruptor"]];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryType=UITableViewCellAccessoryNone;
cell.detailTextLabel.text=@"";
}
我在viewDidLoad和switch的操作中添加了NSLogs,如下所示:
NSLog(@" interruptor Defaults at startup %d", [[NSUserDefaults standardUserDefaults]boolForKey:@"interruptor"]);
NSLog(@"interruptor isOn? %d", interruptor.isOn);
现在,我遇到的问题是,当开关保存为“ON”时,第一部分的第二行不会出现,它只显示带开关的第一行。如果我关闭然后再打开,那就没问题。我还不明白的是,当开关保存为ON时,viewDidLoad上的NSLog显示:
interruptor Defaults at startup: 1
interruptor isOn:0
我无法理解这是怎么可能的。显然,保存的状态为ON,显示为ON(蓝色),但在询问时,开关显示为OFF。
我虽然这样做很容易,但我已经有两个晚上了。任何帮助将不胜感激。
提前致谢!
答案 0 :(得分:1)
我之前尝试添加
switch.on=[[NSUserdefaults standardUserDefaults] boolForKey:@"switch"];
到viewDidLoad
,但它不起作用。
事实证明,我在self.
之前错过了switch.on
。
它现在就像一个魅力。