2012-04-11 4 views
0

問題が発生して、アプリケーションでUISwitchの状態を保持できません。私はこの問題を解決するために、さまざまなチュートリアルやコードソースからたくさんの異なる例を試していますが、私は完全な画像を見ていないと思います。UISwitchを設定して保存するNSUserDefaults値

私は、ユーザーの好みの画面を設定して、関連するコードは次のとおりです。

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

誰かが私が間違っている場所(Objective-Cではなく英語で)を教えてくれたら、感謝します。ありがとう!

+0

はあなたが' NSStringの* firstRunValue = [ "testSwitch" @ [NSUserDefaults standardUserDefaults] stringForKey]から得るものにチェックしましたか? boolian値から文字列を取得しようとしています。私はそこで何が起こるか分からない。 – dasdom

+0

NSUserDefaultsがどこに格納されているのか分かりませんが、NSUserDefaultsをどこにも見ることができませんが、NSLogにダンプすれば空白になります。しかし、それは明らかに問題でもありますが、それは問題ではありませんか? IBではデフォルトではまだOFFですが、スイッチを入れるとその状態を保持しません。 – user1326192

+0

はい、 'if(!firstRunValue)'が常にtrueであるためです。私の答えを見てください。 – dasdom

答えて

0

はこれを試してみてください; `最初の実行後:

NSString *firstRunValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"firstRun"]; 

if (!firstRunValue) { 
    [[NSUserDefaults standardUserDefaults] setObject: @"BlaBla" forKey:@"firstRun"]; 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"testSwitch"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+0

こんにちは、 "NSUserDefaults 'の表示されない@interfaceがセレクタ' forKey:forKey: '"を宣言しているというエラーが表示されていますか? – user1326192

+0

私は私の答えを編集しました。 'setString:forKey:'は存在しません。 'setObjekt:forKey:'です。 – dasdom

+0

おかげで、エラーが修正されました。コードはすべて正常に実行されますが、まだスイッチを正しく設定していません。私はそれをオフにして保存すると、私は正しい設定がログにダンプされて取得するが、私はオプションに戻るときに、私はそれをオフにデフォルトで(物理的にIBで設定され、appDelegateあまりにもprefとして)それはまだオフスクリーンです... – user1326192

関連する問題