Комбинация UITableView, UISwitch и NSUserDefaults?

#ios #uitableview #nsuserdefaults #uiswitch

#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 amp;amp; 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, когда переключатель сохраняется как включенный, показывают это:

  interruptor Defaults at startup: 1
 interruptor isOn:0
  

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

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

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

Ответ №1:

Ладно, неважно. Я заставил это работать.

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

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

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

Как оказалось, я пропустил self. перед switch.on .

Теперь это работает как по волшебству.