Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将UISwitch的状态保存到文件_Iphone_Ios_Objective C_Ipad_Nsuserdefaults - Fatal编程技术网

Iphone 如何将UISwitch的状态保存到文件

Iphone 如何将UISwitch的状态保存到文件,iphone,ios,objective-c,ipad,nsuserdefaults,Iphone,Ios,Objective C,Ipad,Nsuserdefaults,关于stackoverflow的类似问题产生了以下组合: NSUserDefaults*userDefaults=[NSUserDefaults standardUserDefaults]; [userDefaults setBool:switchState-forKey:@“mySwitchValueKey”] 及 BOOL swichState=[userDefaults boolForKey:@“mySwitchValueKey”] 我一直在尝试研究NSUserDefaults,但我既不了

关于stackoverflow的类似问题产生了以下组合:

NSUserDefaults*userDefaults=[NSUserDefaults standardUserDefaults];
[userDefaults setBool:switchState-forKey:@“mySwitchValueKey”]

BOOL swichState=[userDefaults boolForKey:@“mySwitchValueKey”]

我一直在尝试研究NSUserDefaults,但我既不了解这些代码的作用,也不了解它们应该在我的程序中的位置


谁能告诉我他们需要去哪里?为什么下面的代码不起作用

- (void)viewDidLoad
{
    [super viewDidLoad];
    BOOL switchState = [[NSUserDefaults standardUserDefaults]  boolForKey:@"mySwitchValueKey"];
    if (switchState == YES) {
        [hard1ON setOn:TRUE];
    } else {
        [hard1ON setOn:FALSE];
    }
}

- (IBAction)switchValueChanged
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setBool:switchState forKey:@"mySwitchValueKey"];

    if (hard1ON.on) {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"theChange" object:nil];
    } else {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"theChange2" object:nil];
    }
}

这两条语句用于创建
NSUserDefaults
的实例,然后在
standardUserDefaults
中设置应用程序的
switchState

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:switchState forKey:@"mySwitchValueKey"];
switchState
必须在该语句上方的任何位置声明为
BOOL switchState

从这条语句
boolswichstate=[userDefaults boolForKey:@“mySwitchValueKey]”布尔值读回swichState

假设switchState是类的本地属性,则当您更改或翻转或移动到另一个视图时,上述代码应该位于调用的方法中

如果它是全局的或共享的,那么它可以在任何地方,最合适的位置应该是
ApplicationHoldTerminate:

  • 前两行用于保存数据,因此在任何提交/保存按钮事件中,您都可以使用这两行来保存数据。或者,您可以在每次开关值更改时保存
  • 第二行用于检索保存的数据,所以在重新启动应用程序时可以使用它。这样您就可以了解上次发布中保存了哪些数据。根据这一点,你可以继续你的代码
有关更多详细信息,请检查此项,它可能会为您提供有关NSUserDefaults的简要说明


希望这能有所帮助。

请查看我问题的编辑,你能告诉我为什么它不起作用吗?@LouisHolley:在设置时,你也应该使用
[standardUserDefaults synchronize]在viewDidLoad或iAction中?它说standardUserDefaults是一个未声明的变量在switchValueChanged中,使用
[[NSUserDefaults standardUserDefaults]同步]
谢谢你的回答,你能告诉我为什么对我的问题的编辑不起作用吗?-(iAction)switchValueChanged{NSUserDefaults*userDefaults=[NSUserDefaults standardUserDefaults];[userDefaults setBool:.isOn forKey:@“mySwitchValueKey”];尝试这行代码您现在有了所需的结果吗?刚刚登录到stackoverflow。感谢帮助:)它正在工作如果您将nslog(@“%d”,switchState)放入在viewDidLoad中。控制台中未发生任何事件,因此从未调用viewDidLoad?每次在switchValueChanged方法中加载视图时,它都会记录0您使用的
setBool:switchState
从何处获取switchState??这是ivar/属性吗?