/ /私のUISwitchでNSUserDefaultsが動作しない理由 - iphone、objective-c、cocoa-touch、nsuserdefaults、uiswitch

NSUserDefaultsが私のUISwitchで動作しない理由 - iphone、objective-c、cocoa-touch、nsuserdefaults、uiswitch

ユーザーがそれをオンにするまで、デフォルトでオフになっているUISwitchをセットアップしようとしていますが、デフォルトではONになっています。

AppDelegateのdidFinishLaunching:

NSString *testValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"pinCodeSwitch"];
if (!testValue) {
// since no default values have been set, create them here
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"pinCodeSwitch"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

VC "のviewDidAppear:

UISwitch* testSwitch = [[[UISwitch alloc] init] autorelease];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"pinCodeSwitch"]) {
[testSwitch setOn:NO animated:NO];
}
self.pinCodeSwitch = testSwitch;

UISwitchの値が変更されたときにBOOLを保存する方法:

- (IBAction)pinCodeSwitchChanged:(id)sender
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"pinCodeSwitch"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"pinCodeSwitch"];
}

回答:

回答№1は2

"pinCodeSwitch"をNOに設定してからスイッチを設定することはできません。ifステートメントはスキップされます。 それを次のように変更します。

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"pinCodeSwitch"])

(テストを否定)、スイッチがオフになります。


回答№2の場合は1

Interface Builderでこの値を "STATE"値でOFFに指定することができます。 その後、次のコードを適用してスイッチの値を保存します。

[YourUiSwitch setOn:NO animated:YES];
[[NSUserDefaults standardUserDefaults]setValue:YourUiSwitch forKey:@"youruiswitch"];
[[NSUserDefaults standardUserDefaults]synchronize];

ビューがロードされたときにデフォルトからロードされます: `YourUiSwitch =

[[NSUserDefaults standardUserDefaults]valueForKey:@"youruiswitch"];`

幸運によう!