Preferências - exmo/equizmo-ios GitHub Wiki

Onde encontrar?

Na tela de ranking adicionamos um botão "Configurar" que abre a tela de preferências: PreferencesViewController.h que faz uso do modelo Preference.h;

A classe PreferencesViewController exemplifica como montar a tabela, inclusive para customizar as celulas com swichtes e steppers criamos os componentes PreferencesSwicthCell e PreferencesStepperCell;

Como funciona?

Vamos direto ao ponto! Salvar preferências é muito simples!

Na classe Preference criamos as propriedades isSoundEnabled ( para tocar sons quando corrige as respostas) e rankingSize ( para informar quantos usuários exibir no ranking);

Vamos utilizar dois métodos, um para carregar os dados e outro para salvar.

Salvar:

-(void) save{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool: isSoundEnabled forKey:PREFS_SOUND_ENABLED];
    [defaults setInteger:rankingSize forKey:PREFS_RANKING_SIZE];
    [defaults synchronize];
}

Na primeira linha obtemos os dados salvos no formato NSUserDefaults que é equivalente a um NSDictionary. Na linha seguinte setamos um valor booleando da propriedade isSoundEnabled na chave PREFS_SOUND_ENABLED. Por fim pedimos ao NSUserDefaults para sincronizar, e pronto! Tudo está salvo;

No método load instanciamos o objeto Preference e setamos os valores que estavam salvos ou um valor inicial.

+(Preference *) load{
    Preference *instance = [[Preference alloc] init];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if([[NSUserDefaults standardUserDefaults] objectForKey:PREFS_SOUND_ENABLED] != nil){
        instance.isSoundEnabled = [defaults boolForKey:PREFS_SOUND_ENABLED];
    }else {
        instance.isSoundEnabled = YES;
    }
    if([[NSUserDefaults standardUserDefaults] objectForKey:PREFS_RANKING_SIZE] != nil){
        instance.rankingSize = [defaults integerForKey:PREFS_RANKING_SIZE];
    }else {
        instance.rankingSize = 5;
    }
    return instance;
}