保存复选框值

时间:2014-04-10 23:10:51

标签: ios objective-c cocoa-touch nsuserdefaults

在这里和其他许多人一样,我是Xcode的新手,想问一个基本的问题。当检查一个方框并离开Xcode时,当我重新打开Xcode项目时,不保存该值(未选中框)。

我在这里看到了不同的讨论:例如如何保存复选框值检查/取消选中NSUserDefaults但它在我的代码中不起作用。你有问题的提示吗?

在我的.h中,我创建了一个BOOL实例(称为“已检查”),UIButton既作为IBAction又作为IBOutlet连接。

- (void)viewDidLoad{
checked = NO;
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Negative"];
BOOL checked = [[NSUserDefaults standardUserDefaults] boolForKey:@"Negative"];
[[NSUserDefaults standardUserDefaults] synchronize];

[super viewDidLoad];

NSUserDefaults *defaults70 = [NSUserDefaults standardUserDefaults];
checked = [defaults70 boolForKey: @"boxIsChecked70"];
[self checkTheBox];   
 [self updateLabels];}

- (IBAction)CheckCOUTCheckButton:(id)sender {
NSUserDefaults *defaults70 = [NSUserDefaults standardUserDefaults];
if (! checked) {
    [_CheckBoxCOUTButton setImage:[UIImage imageNamed:@"Checkboxcheckedimage.png"] forState:UIControlStateNormal];
    checked = YES;
    [defaults70 setBool:checked forKey:@"boxIsChecked70"];}
else if (checked) {
    [_CheckBoxCOUTButton setImage:[UIImage imageNamed:@"Checkboxuncheckedimage.png"] forState:UIControlStateNormal];
    checked = NO;
    [defaults70 setBool:checked forKey:@"boxIsChecked70"];}
[defaults70 synchronize];}



- (void) checkTheBox {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! checked) {
    [_CheckBoxCOUTButton setImage:[UIImage imageNamed:@"Checkboxuncheckedimage.png"] forState:UIControlStateNormal];
}
else if (checked) {
    [_CheckBoxCOUTButton setImage:[UIImage imageNamed:@"Checkboxcheckedimage.png"] forState:UIControlStateNormal];
}

- (IBAction)ClearAllFields:(id)sender {
[_CheckBoxCOUTButton setImage:[UIImage imageNamed:@"Checkboxuncheckedimage.png"] forState:UIControlStateNormal];
checked = NO;}

2 个答案:

答案 0 :(得分:1)

您的问题是范围问题。您正在定义一个名为checked的第二个变量,并将您正在设置的变量混淆。

- (void)viewDidLoad{
checked = NO;

在这一行中你设置属性 - 即self.checked值为NO。

  

BOOL checked = [[NSUserDefaults standardUserDefaults] boolForKey:@" Negative"];   [[NSUserDefaults standardUserDefaults] synchronize];

在这一行中你要声明一个只存在于viewDidLoad中的新局部变量。

尝试删除之前的BOOL。当viewDidLoad返回时,此局部变量将超出范围并消失。

  

checked = [[NSUserDefaults standardUserDefaults] boolForKey:@" Negative"];   [[NSUserDefaults standardUserDefaults] synchronize];

稍后当您将复选框设置为checkTheBox的一部分时,您正在阅读该属性,而不是您设置的本地变量。

如果这不清楚,请告诉我。

答案 1 :(得分:0)

我不确定这是否是您唯一的问题,但在您的viewDidLoad中,您在阅读之前基本上设置了一个值:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Negative"];
BOOL checked = [[NSUserDefaults standardUserDefaults] boolForKey:@"Negative"];

你可能想这样做:

BOOL checked = [[NSUserDefaults standardUserDefaults] boolForKey:@"Negative"];