2016-04-09 16 views
0

Ich habe einen UISwitch, mit dem die Soundeffekte gedämpft werden. Wenn der Schalter auf ON gestellt ist, sind die Soundeffekte stumm. Der Status wird mit NSUserDefaults gespeichert. Es funktioniert großartig. Aber wenn die App von der allerersten Zeit nach der Installation gestartet wird, und Sie zu den Einstellungen kamen und der Schalter auf OFF steht, aber kein Ton. Aber wenn ich den Schalter an und dann wieder aus drücke, funktioniert der Soundeffekt.UISchalten Sie den Standardwert auf OFF, wenn Sie die App zum ersten Mal starten.

Wie schalte ich den Standardwert des Schalters auf OFF.

Ich habe ähnliche Beispiele gesehen, aber ich bekomme es nicht zur Arbeit.

Im ersten Viewcontroller habe ich diesen Code:

- (void)viewDidLoad { 

    NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

    if ([[NSUserDefaults standardUserDefaults]objectForKey:@"switchKeyLjud"]==nil) 
    { 
     [[standardDefaults stringForKey:@"switchKeyLjud"] isEqual: @"off"]; 
    } 

    if ([[standardDefaults stringForKey:@"switchKeyLjud"] isEqual: @"off"]) { 

     ImageViewLjud.hidden = YES; 

    } 

} 

und in den Einstellungen Viewcontroller:

- (void)viewDidLoad { 

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

self->switchOutletLjud.on = ([[standardDefaults stringForKey:@"switchKeyLjud"] 

           isEqualToString:@"On"]) ? (YES) : (NO); 


if ([[standardDefaults stringForKey:@"switchKeyLjud"] isEqual: @"On"]) { 

    [ImageViewLjud setImage:[UIImage imageNamed:@"ljudOFF.png"]]; 
} 

else { 

    [ImageViewLjud setImage:[UIImage imageNamed:@"ljudON.png"]]; 
} 
} 

und dies ist der Schalter

- (IBAction)switchLjudChanged:(UISwitch *)sender { 

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

if (sender.on == 0) { 

    [standardDefaults setObject:@"Off" forKey:@"switchKeyLjud"]; 

} else if (sender.on == 1) { 

    [standardDefaults setObject:@"On" forKey:@"switchKeyLjud"]; 

} 

if ([[standardDefaults stringForKey:@"switchKeyLjud"] isEqual: @"On"]) { 

    [ImageViewLjud setImage:[UIImage imageNamed:@"ljudOFF.png"]]; 
} 

else { 

    [ImageViewLjud setImage:[UIImage imageNamed:@"ljudON.png"]]; 
} 

    [standardDefaults synchronize]; 

} 

Vielen Dank für jede Hilfe! !

Antwort

0

Es sieht aus wie ein sehr einfacher Fehler in dem Beispielcode:

- (void)viewDidLoad { 

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

if ([[NSUserDefaults standardUserDefaults]objectForKey:@"switchKeyLjud"]==nil) 
{ 
    [[standardDefaults stringForKey:@"switchKeyLjud"] isEqual: @"off"]; 
} 

Die Logik in diesem Fall nicht wirklich den „off“ Taste eingestellt, sind Sie nur es zu bewerten. Zuerst prüfen Sie, ob es Null ist. Wenn es Null ist, dann prüfen Sie, ob es gleich "aus" ist. Wenn es null ist, kann es nicht gleich "aus" sein. Ich denke, was Sie für den Fall zu tun, wollen, dass es anfänglich null ist, dann ist es weg Einstellung:

[standardDefaults setString:@"off" forKey:@"switchKeyLjud"]; 

Sieht aus wie ein einfacher Tippfehler.

Denken Sie darüber hinaus darüber nach, die BOOL Werte direkt in Ihren Benutzereinstellungen festzulegen, anstatt sich auf Zeichenfolgen zu verlassen und diese dann in BOOL Werte im Code zu übersetzen. Sofern Sie nicht eine spezifische Notwendigkeit haben, sie als Zeichenfolgen in NSUserDefaults zu speichern, vermeiden Sie den zusätzlichen Fehlerpunkt.

+0

Vielen Dank für Ihre Antwort, ich sah, dass ich den falschen Code für den ersten ViewController, in der ViewDidLoad, ich habe nicht die erste "if-Anweisung". Grüße Daniel – user3266053