Ich stoße auf ein Problem, bei dem ich den Status eines UISwitch in meiner App nicht beibehalten kann. Ich denke, das Problem ist, dass ich so viele verschiedene Beispiele aus verschiedenen Tutorials und Quelltexten ausprobiert habe, um das funktionieren zu lassen, und ich sehe nur nicht das vollständige Bild.Fehler beim Setzen von UISwitch auf gespeicherten NSUserDefaults-Wert
Ich habe einen Benutzereinstellungen Bildschirm, einen entsprechenden Code aufgebaut ist:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Trying here to check whether user has run app previously, and if not set default switch value (as defined in IB)
NSString *firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"testSwitch"];
if (!firstRunValue) {
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"testSwitch"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}
OptionsViewController.h
@property (weak, nonatomic) IBOutlet UISwitch *testSwitch;
OptionsViewController.m
@synthesize testSwitch;
.
.
.
- (void)viewDidLoad
{
[super viewDidLoad];
// Here's the issue - following line does NOT set switch as expected from defaults...
[testSwitch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"testSwitch"] animated:NO];
}
.
.
.
- (IBAction)updateTest:(id)sender {
// Action called when switch is clicked to save new state, Log shows 0 or 1 as expected
[[NSUserDefaults standardUserDefaults] setBool:[sender isOn] forKey:@"testSwitch"];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults]valueForKey:@"testSwitch"]);
}
.
.
.
- (IBAction)saveOptions:(id)sender {
// When user clicks "Save" and exits, I synch defaults and dump them, again output is as expected
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
[self dismissModalViewControllerAnimated:YES];
}
Wenn mir jemand sagen könnte, wo ich falsch liege (auf Englisch und nicht in Objective-C!), Würde ich mich freuen, danke!
Haben Sie überprüft, was Sie von 'NSString bekommen * firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey: @ "testSwitch"];' nach dem ersten Lauf? Sie versuchen, eine Zeichenfolge aus einem boolischen Wert zu erhalten. Ich weiß nicht, was dort passieren würde. – dasdom
Ich bin nicht sicher, wo diese NSUserDefaults gespeichert sind, ich kann sie nirgends sehen, aber wenn ich es in NSLog ablege, sieht es leer aus ... überhaupt kein Wert gespeichert. Aber obwohl das natürlich auch ein Problem ist, sollte es nicht wichtig sein, oder? Es ist immer noch standardmäßig in IB ausgeschaltet, und wenn ich es einschalte, behält es diesen Zustand nicht bei. – user1326192
Ja, weil 'if (! FirstRunValue)' immer wahr ist. Siehe meine Antwort. – dasdom