2013-03-03 67 views
0

类似的问题,得到的组合:如何保存UISwitch的状态到文件上的计算器

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

如果在viewDidLoad中放入nslog(@“%d”,switchState),会得到什么结果。 – 2013-03-03 16:41:27

+0

控制台中没有任何反应 – 2013-03-03 16:44:03

+0

所以你的viewDidLoad永远不会被调用? – 2013-03-03 16:45:08

回答

0
  • 前两行用于保存您的数据,因此在任何提交/保存按钮事件中,您都可以使用此行保存数据。否则,每次切换值更改时都可以保存。
  • 第二行是用于检索您保存的数据,因此您可以在应用程序重新启动时使用它。以便您可以了解,上次启动时保存了哪些数据。根据这一点,你可以在你的代码中继续。

有关更多详细信息,请检查此link,它可能会给您关于NSUserDefaults的简要说明。

希望这会有所帮助。

+0

感谢您的回应,请你告诉我为什么编辑我的问题不工作? – 2013-03-03 16:35:36

+0

- (IBAction)switchValueChanged { NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setBool: .isOn forKey:@“mySwitchValueKey”]; 试试此行代码 – Mrunal 2013-03-04 05:09:53

+0

你现在是否得到了你所需的结果? – Mrunal 2013-03-04 14:07:35

1

这两句话用来创建NSUserDefaults一个实例,然后在设定的standardUserDefaultsswitchState,与您的应用程序。

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setBool:switchState forKey:@"mySwitchValueKey"]; 

switchState必须高于这一声明作为BOOL switchState任何地方声明。

从这条语句BOOL swichState = [userDefaults boolForKey:@"mySwitchValueKey"];将boolValue读回swichState。

上面的代码应该在您更改或翻转或移动到其他视图时调用的方法中,假定switchState是类的本地属性。

如果是全球或共享它可以在任何地方,最合适的地方将是applicationSholdTerminate:

+0

请参阅编辑我的问题,你能告诉我为什么它不起作用吗? – 2013-03-03 16:34:29

+0

@LouisHolley:虽然设置你还应该在viewDidLoad或IBAction中使用'[standardUserDefaults synchronize];' – 2013-03-03 16:39:52

+0

?它说standardUserDefaults是一个未声明变量 – 2013-03-03 16:41:54