#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
.
Теперь это работает как по волшебству.