UITableView, UISWitch и NSUserdefaults сочетание? - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть 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

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

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

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

1 Ответ

1 голос
/ 10 ноября 2011

ОК, неважно. Я получил его на работу.

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

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

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

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

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

...