2011-06-25 3 views
0

J'ai un UISwitch dans mon application avec un dans mon ensemble de paramètres avec la même fonctionnalité. L'UISwitch dans mon application ne sauvegarde pas ses paramètres correctement. Quelqu'un peut-il voir quelque chose de mal avec le code?UISwitch ne répond pas aux changements NSUserDefault

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Set the application defaults 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"No" forKey:@"isKgs"]; 
    [defaults registerDefaults:appDefaults]; 
    [defaults synchronize]; 
} 

- (void)switchChanged 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:unitSwitch.selected forKey:@"isKgs"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    NSLog(@"SwitchGhanged:"); 
} 

-(void)cellForRowAtIndexPath 
{ 
    [unitSwitch addTarget:self action:@selector(switchChanged) forControlEvents:UIControlEventValueChanged];   
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isKgs"]) 
    { 
     [unitSwitch setOn:YES animated:NO]; 
    } 
} 

Et voici les paramètres bundle enter image description here

Répondre

0
[[NSUserDefaults standardUserDefaults] setBool:unitSwitch.on forKey:@"isKgs"]; 

Utilisez la propriété on pour le paramètre.

+0

N'ai-je pas besoin de définir les paramètres par défaut qui s'enregistrent si l'utilisateur n'a jamais ouvert la page des paramètres? Si l'application n'a jamais enregistré de valeur pour une clé particulière, vous obtenez la valeur que vous avez indiquée dans registerDefaults. Sinon, la valeur sauvegardée remplace la valeur de départ –

+0

Merci, je pense que le "on" au lieu de "sélectionné" tout fixé. –

+1

@Faisal Vous devez le faire. Ma faute. –

0

Essayez d'utiliser on sur le UISwitch:

[[NSUserDefaults standardUserDefaults] setBool:unitSwitch.on forKey:@"isKgs"]; 

EDIT: Pas besoin de tester unitSwitch.on est déjà booléennes, vous pouvez assigner directement.

+0

Ajoutez ceci à la méthode cellForRow ou switchChanged? –

+0

Ce code doit remplacer la première ligne de votre méthode switchChanged. –

Questions connexes