Использование NSUserDefaults для хранения состояния UISwitch - PullRequest
1 голос
/ 20 ноября 2010

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

if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SomeIdentifierB] autorelease];
            if (syncStartupSwitch) {
                syncSwitch.on = YES;
            }else {
                syncSwitch.on = NO;
            }

            [syncSwitch addTarget:self action:@selector(syncAtStartup:) forControlEvents:UIControlEventValueChanged];


            NSLog(@"Why is this not working%@",(syncSwitch.on ? @"YES" : @"NO"));
                [cell.contentView addSubview:syncSwitch];
            cell.accessoryView = syncSwitch;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
                //cell.reuseIdentifier  = @"Cell1";
        }
        cell.textLabel.text =cellValue;
        return cell;
    }

Теперь я хотел бы сохранить состояние переключателей, используя NSUserDefaults.Итак, в моей реализации метода селектора я определил NSUserDefaults так:

-(void) syncAtStartup:(id)sender {
    if ([sender isOn]) {
        [[NSUserDefaults standardUserDefaults]
         setObject:@"YES" forKey:@"SyncAtStartup"];
        [[NSUserDefaults standardUserDefaults]synchronize];
        NSLog(@"%@",(syncStartupSwitch ? @"YES" : @"NO"));

    }else {
        [[NSUserDefaults standardUserDefaults]
         setObject:@"NO" forKey:@"SyncAtStartup"];
            //syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];

    }
}

Наконец, в моем viewDidLoad я написал следующую строку кода:

syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];

Я уверен, что есть некоторыеотсутствует логика в моей реализации.Может кто-нибудь указать на недостаток и исправить меня?

ОБНОВЛЕНИЕ: Я принял предложение от @jfalexvijay и использовал следующий код:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL syncStartupSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

Когда я смотрю вв папке Preferences я вижу, как создается plist со значением BOOL.Затем я пытаюсь установить состояние UISwitch в методе cellForRowAtIndexPath следующим образом:

syncSwitch.on = syncStartupSwitch;

У меня также есть эта строка кода в ApplicationWillTerminate и в самом селекторе

[[NSUserDefaults standardUserDefaults]synchronize];

Тем не менее после перезапускаВ приложении на симуляторе или устройстве состояние переключателя не восстанавливается ...

В чем моя ошибка в приведенном выше коде?

Ура,

iSee

Ответы [ 2 ]

3 голосов
/ 20 ноября 2010

Вы можете использовать следующий код;


[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

если вы используете следующий код, он вернет YES;


[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

Просто протестируйте код выше;

1 голос
/ 20 ноября 2010

Вместо использования setObject: forKey: попробуйте использовать setBool: forKey:.

[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];
...