2016-04-09 14 views
0

私はサウンドエフェクトをミュートするために使用されるUISwitchを持っています。 スイッチがONに設定されていると、効果音はミュートになります。 状態はNSUserDefaultsを使用して保存されます。それは素晴らしい作品です。しかし、アプリケーションをインストールした後初めて起動したときに、設定に入り、スイッチはOFFに設定されていますが、サウンドはありません。しかし、スイッチをもう一度押すと、サウンドエフェクトが機能します。UISwitchは初めてアプリケーションを起動するときにデフォルト値をOFFに設定します

スイッチのデフォルト値をOFFに設定するにはどうすればよいですか。

私は同様のexempelsを見ましたが、私はそれを動作させることはありません。私はこのコードを持っている最初のViewControllerで

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

    } 

} 

と設定での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"]]; 
} 
} 

、これは任意のヘルプ

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

} 

おかげスイッチです! !それはあなたのサンプルコードでは非常に簡単なエラーのように見えます

答えて

0

:この場合のロジックは、実際に「オフ」キーを設定していない

- (void)viewDidLoad { 

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

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

、あなたはそれを評価しています。まず、それがゼロかどうかチェックします。それが無ければ、 "off"に等しいかどうかをチェックします。それが無ければ、それは「オフ」に等しいこともできない。私はあなたがやって欲しいものだと思う、それは最初はゼロである場合には、オフにそれを設定している:

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

は、単純なタイプミスのように見えます。

さらに、文字列を使用してコード内でBOOLの値に変換するのではなく、ユーザーのデフォルトで直接値を設定することを検討してください。 NSUserDefaultsに文字列として格納する必要がある場合を除き、追加の障害点は避けてください。

+0

お返事ありがとうございます。最初のViewControllerの間違ったコードをViewDidLoadに投稿しています。最初のif文はありません。ダニエルに感謝 – user3266053

関連する問題