0

アプリで UISwitch の状態を保持できないという問題が発生しています。問題は、これを機能させるためにさまざまなチュートリアルやコード ソースから非常に多くのさまざまな例を試してきたことだと思いますが、全体像が見えていません。

ユーザー設定画面をセットアップしました。関連するコードは次のとおりです。

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 ではなく英語で!)、感謝します!

4

1 に答える 1

0

これを試して:

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

if (!firstRunValue) {
    [[NSUserDefaults standardUserDefaults] setObject: @"BlaBla" forKey:@"firstRun"];
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"testSwitch"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
于 2012-04-11T10:21:57.340 に答える