2010-08-27 22 views

Répondre

3

La réponse de hotpaw2 est bon et peut aussi bien fonctionner pour le grand contrôle segmentée (plus de 2 états). Mais si vous voulez seulement stocker 2 états, pourquoi ne pas simplement utiliser [setBool:forKey:] comme ça

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setBool:switchState forKey:@"mySwitchValueKey"]; 

et le sortir:

BOOL swichState = [userDefaults boolForKey:@"mySwitchValueKey"]; 

qui imo, est beaucoup plus simple, pas si le code d'autre du tout , aucune chaîne de conversion en arrière et pour

+0

Je crois que c'est ce que je cherche ... Je vais essayer ... Merci! – matteodv

1

Pour enregistrer:

- (void)mySwitchAction:(id)sender 
{ 
    if (sender == mySwitch) { 
    BOOL mySwitchValue = [ sender isOn ]; 
    NSString *tmpString = mySwitchValue ? @"1" : @"-1" ; 
    NSUserDefaults *myNSUD = [NSUserDefaults standardUserDefaults]; 
    [ myNSUD setObject:tmpString forKey: @"mySwitchValueKey" ]; 
    [ myNSUD synchronize ]; 
    // do other stuff/actions 
    } 
} 

Pour initialiser d'état enregistré:

NSUserDefaults *myNSUD = [NSUserDefaults standardUserDefaults]; 
NSString *tmpString = [ myNSUD stringForKey: @"mySwitchValueKey"]; 
BOOL mySwitchValue = NO; // or DEFAULT_VALUE 
if (tmpString != nil) { 
    mySwitchValue = ([ tmpString intValue ] == 1); 
} 
[mySwitch setOn: mySwitchValue]; 
+0

Et puis-je utiliser une méthode sans déclaration? Je dois enregistrer l'état dans un contrôleur et après vérifier l'état et faire une action dans un autre contrôleur ... Comment puis-je faire cela? – matteodv

+0

Cela ressemble à une question nouvelle et différente. – hotpaw2

+0

@Matthew: Je pense que c'est facile, vous pouvez simplement obtenir l'état des userDefaults dans un autre contrôleur de vue. Regardez ma réponse pour une réponse plus simple, sans déclaration de méthode du tout :) – vodkhang