UITableView,UISWitch和NSUserdefaults的组合?

时间:2011-11-09 21:55:13

标签: ios uitableview nsuserdefaults uiswitch

我有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。

我虽然这样做很容易,但我已经有两个晚上了。任何帮助将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:1)

好的,没关系。我得到了它的工作。

我之前尝试添加

switch.on=[[NSUserdefaults standardUserDefaults] boolForKey:@"switch"];

viewDidLoad,但它不起作用。

事实证明,我在self.之前错过了switch.on

它现在就像一个魅力。