在这里和其他许多人一样,我是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;}
答案 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"];