2010-11-20 8 views
1

Ich versuche, den UISwitch Zustand in meinen Einstellungen Ansicht meiner Anwendung zu erhalten. Grundsätzlich ist es ein UITableView und enthält ein paar Schalter, um die Benutzereinstellungen zu erhalten. Der folgende Code erklärt, wie die Schalter aufgebaut sind (nur ein Schalterkonstrukt ist unten angegeben, andere sind auch auf die gleiche Weise konstruiert).Verwenden von NSUserDefaults zum Speichern von UISwitch-Status

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; 
    } 

Jetzt möchte ich den Zustand der Schalter mit NSUserDefaults speichern. Also meiner Wähler Methode Implementierung definiert ich die NSUserDefaults wie folgt aus:

-(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"]; 

    } 
} 

schließlich in meiner viewDidLoad ich diese Zeile Code geschrieben:

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

Ich bin sicher, dass es einige fehlende Logik meiner Implementierung. Kann jemand auf den Fehler hinweisen und mich korrigieren?

UPDATE: Ich nahm den Vorschlag von @jfalexvijay und verwendet, um den folgenden Code:

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

Wenn ich die Preferences-Ordner schauen, ich sehe der plist mit dem BOOL Wert darin erstellt zu werden. Ich versuche dann, wie dies den UISwitch Zustand in cellForRowAtIndexPath Verfahren einzustellen:

syncSwitch.on = syncStartupSwitch; 

Ich habe auch diese Codezeile in ApplicationWillTerminate und im Selektor selbst

[[NSUserDefaults standardUserDefaults]synchronize]; 

Noch nach der Anwendung auf dem Neustart Simulator oder Gerät, der Schaltzustand wird nicht wiederhergestellt ...

Was ist mein Fehler im obigen Code?

Cheers,

iSee

+0

Sie sollten "boolForKey" nicht verwenden, um den Wert zu erhalten, wenn Sie "setObject" verwenden; Sie sollten valueForKey verwenden; – jfalexvijay

Antwort

3

können Sie folgenden Code verwenden;


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

Wenn Sie den folgenden Code verwenden, wird YES zurückgegeben;


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

Einfach obigen Code testen;

+0

Hallo, danke für den Vorschlag. Der obige Code funktioniert einwandfrei. Ich kann die plist Datei sehen, die mit dem BOOL aktualisiert wird, aber ich bin immer noch nicht in der Lage, den BOOL zu finden und den UISwitch dementsprechend einzustellen. – iSee

+0

Ich habe mit folgendem Beispiel geprüft; if ([[NSUserDefaults standardUserDefaults] boolForKey: @ "SyncAtStartup"]) syncSwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey: @ "SyncAtStartup"]; else // Zeige Alarm. es funktioniert gut – jfalexvijay

+0

Mein schlechter ging es falsch beim Zuweisen des BOOL-Wertes zum UISwitch ... Danke, ich betrachte dies als die beste Antwort, die mein Problem gelöst hat. – iSee

1

Statt setObject verwenden: forKey: versuchen Sie es mit setBool: forKey :.

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

Außer Sie wollen "JA", nicht "WAHR". –

+1

JA und @ "JA" sind definitiv nicht die gleichen Dinge. – taskinoor

+1

Es gibt keinen praktischen Unterschied zwischen JA/NEIN und WAHR/FALSCH. – taskinoor

Verwandte Themen