0

我有一个main window使用buttonnavigation controller. 我有一个view controller存放我的UISwitch. 我UISwitch的功能很好,但是当我返回时,开关会自动“关闭”。

我尝试使用这些,

[[NSUserDefaults standardUserDefaults] setBool:startTrackingButton.on forKey:@"switchValue"];
[[NSUserDefaults standardUserDefaults] synchronize];

但同样的问题存在。由于我只有一个视图控制器,我无法检索NSUserDefaults.

有什么建议么?

4

2 回答 2

1

“由于我只有一个视图控制器,我无法检索 NSUserDefaults。”

您可以在该视图中检索用户默认值viewDIdLoad以读取开关位置

所以如果你只有一个viewController

  1. 保存到NSSsuserDefaults你正在做的事情
  2. 在 viewDidLoad 中读取开关状态以检索开关的位置

在您的开关操作方法中保存开关状态

 if (sender == _switch) {
    BOOL mySwitchValue = [ sender isOn ];
    NSString *tmpString = mySwitchValue ? @"1" : @"-1" ;
    NSUserDefaults  *myNSUD = [NSUserDefaults standardUserDefaults];
    [ myNSUD setObject:tmpString forKey: @"mySwitchValueKey" ];
    [ myNSUD synchronize ];


    //save a key to read switch state in another view if required
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setBool:self.barCodeSwitch.on forKey:@"switch1"];
    [userDefaults synchronize];

  }


}

读取 viewDidLoad 中保存的开关位置

NSUserDefaults  *myNSUD = [NSUserDefaults standardUserDefaults];
    NSString *tmpString =  [ myNSUD stringForKey: @"mySwitchValueKey"];
    BOOL mySwitchValue = NO;  // or DEFAULT_VALUE on/off
    if (tmpString != nil) {
        mySwitchValue = ( [ tmpString intValue ] == 1 );
    }
    [_autocompleteSwitch setOn: mySwitchValue];
于 2013-08-15T09:01:17.417 回答
1

当您设置视图时,在 init 方法或 viewDidLoad 中执行类似的操作。

[startTrackingButton setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"switchValue"]]

然后每次切换时都会保存开关的状态

[[NSUserDefaults standardUserDefaults] setBool:startTrackingButton.on forKey:@"switchValue"];
[[NSUserDefaults standardUserDefaults] synchronize];
于 2013-08-15T09:06:04.137 回答