У меня есть 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
что я не могу понять, как это возможно. Судя по всему, сохраненное состояние включено, оно отображается как включенное (синим цветом), но при запросе переключатель говорит, что оно выключено.
Я думал, что это будет легко сделать, но у меня было две адских ночи. Любая помощь приветствуется.
Заранее спасибо!