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
Sie sollten "boolForKey" nicht verwenden, um den Wert zu erhalten, wenn Sie "setObject" verwenden; Sie sollten valueForKey verwenden; – jfalexvijay