Комбинация UITableView, UISWitch и NSUserdefaults?

У меня есть 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=@"";
}

Я добавил NSLogs в viewDidLoad и в действиях коммутатора, которые выглядят так:

    NSLog(@" interruptor Defaults at startup %d", [[NSUserDefaults standardUserDefaults]boolForKey:@"interruptor"]);
    NSLog(@"interruptor isOn? %d", interruptor.isOn);

Теперь проблема, с которой я столкнулся, заключается в том, что когда переключатель сохраняется как «ВКЛ», вторая строка в первом разделе не появляется, отображается только первая строка с переключателем. Если я выключу и снова включу переключатель, то все в порядке. Чего я также не понимаю, так это того, что NSLogs в viewDidLoad, когда переключатель сохраняется как ON, показывают это:

 interruptor Defaults at startup: 1
 interruptor isOn:0

что я не могу понять, как это возможно. Судя по всему, сохраненное состояние включено, оно отображается как включенное (синим цветом), но при запросе переключатель говорит, что оно выключено.

Я думал, что это будет легко сделать, но у меня было две адских ночи. Любая помощь приветствуется.

Заранее спасибо!


person Marcal    schedule 09.11.2011    source источник


Ответы (1)


Хорошо, неважно. Я заставил его работать.

Я ранее пытался добавить

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

к viewDidLoad, но это не сработало.

Как оказалось, мне не хватало self. перед switch.on.

Теперь это работает как шарм.

person Marcal    schedule 10.11.2011