iOS-UISwitch忽略NSUserDefaults中的值

iOS-UISwitch忽略NSUserDefaults中的值,ios,objective-c,xcode,nsuserdefaults,uiswitch,Ios,Objective C,Xcode,Nsuserdefaults,Uiswitch,我付出了一切,但我就是想不出这一点。。。需要您的帮助。 我在做什么: 我有一个以导航栏和tableview为主屏幕的应用程序。在导航栏的顶部,我放置了一个UISwitch(用于更改tableview的内容)和一个settings按钮。开关的默认状态为关闭,当用户打开开关时,我会检查设置中的所有帐户信息是否已填写,并基于此,我允许他打开开关或向他发出警告(他应该先填写帐户信息)并关闭开关。 在查看中的accountView上,我有一个“Save”(保存)按钮,如果按下该按钮,将使用NSUserDe

我付出了一切,但我就是想不出这一点。。。需要您的帮助。
我在做什么:
我有一个以导航栏和tableview为主屏幕的应用程序。在导航栏的顶部,我放置了一个UISwitch(用于更改tableview的内容)和一个settings按钮。开关的默认状态为关闭,当用户打开开关时,我会检查设置中的所有帐户信息是否已填写,并基于此,我允许他打开开关或向他发出警告(他应该先填写帐户信息)并关闭开关。
在查看中的accountView上,我有一个“Save”(保存)按钮,如果按下该按钮,将使用NSUserDefaults存储信息,还有一个字符串,如果填写了所有帐户信息,则另存为“true”(另存为FNAccountFiledKey)。 我的问题:
每次我启动应用程序时,uiSwitch都会出于某种奇怪的原因,在if语句将FNAccountFiledKey设置为“false”之前,将FNAccountFiledKey作为“true”进行评估有趣的是,如果我转到accountView,按下“Save”(保存)按钮并返回,uiSwitch将按需要开始工作

这是我的密码:

改变方法

{
NSString *accountInfo=[[NSUserDefaults standardUserDefaults]objectForKey:@"FNAccountFiledKey"];

NSLog(@"%@",accountInfo);

if (accountInfo==@"false") {

    [self.switch1 setOn:NO animated:YES];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please fill out ALL your Account info first!" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];

} else { //if all account info is filled out proceed as usual

if (self.switch1.on) {
    self.tableView.rowHeight= 76;
} else {
    self.tableView.rowHeight= 590;
}

//reload data when switch is changed
    [[self tableView]reloadData];}
以及AccountView中“保存”按钮的代码:

NSString *name=[nameField text];
NSString *surname=[surnameField text];
NSString *gender=[genderField text];
NSString *birth=[birthField text];
NSString *email=[emailField text];
NSString *phone=[phoneField text];

[[NSUserDefaults standardUserDefaults]setObject:name forKey:FNAccountNameKey];
[[NSUserDefaults standardUserDefaults]setObject:surname forKey:FNAccountSurnameKey];
[[NSUserDefaults standardUserDefaults]setObject:gender forKey:FNAccountGenderKey];
[[NSUserDefaults standardUserDefaults]setObject:birth forKey:FNAccountBirthKey];
[[NSUserDefaults standardUserDefaults]setObject:email forKey:FNAccountEmailKey];
[[NSUserDefaults standardUserDefaults]setObject:phone forKey:FNAccountPhoneKey];

NSString *tru=@"true";
NSString *fals=@"false";

if ((name.length>0)&&(surname.length>0)&&(gender.length>0)&&(birth.length>0)&&(email.length>0)&&(phone.length>0)) {
    [[NSUserDefaults standardUserDefaults]setObject:tru forKey:FNAccountFiledKey];
} else { [[NSUserDefaults standardUserDefaults]setObject:fals forKey:FNAccountFiledKey];
        }
NSLog(@"Account info complete: %@", [[NSUserDefaults standardUserDefaults]objectForKey:FNAccountFiledKey]);
有人知道是什么导致这种行为吗?

谢谢你,像这样试一下比较字符串不要使用
'=='
操作符像这样使用isEqualToString

if ([accountInfo isEqualToString:@"false"]) {

}

请像这样尝试比较字符串,不要使用
'=='
运算符,请像这样使用isEqualToString

if ([accountInfo isEqualToString:@"false"]) {

}

您应该尝试的第一件事是将逻辑运算符“==”替换为“isEqualToString:”如下所示

  if([accountInfo isEqualToString:[NSString stringWithFormat:@"false"]])
  {
       //Do your stuff here
  }
此外,在NSUserDefault中进行任何更改后,还必须将其同步

  [[NSUserDefaults standardUserDefaults] synchronize];

您应该尝试的第一件事是将逻辑运算符“==”替换为“isEqualToString:”如下所示

  if([accountInfo isEqualToString:[NSString stringWithFormat:@"false"]])
  {
       //Do your stuff here
  }
此外,在NSUserDefault中进行任何更改后,还必须将其同步

  [[NSUserDefaults standardUserDefaults] synchronize];

:您的问题解决了吗?是的,谢谢您的帮助!:你的问题解决了吗?是的,谢谢你让我大开眼界!