iOS - UISwitch忽略来自NSUserDefaults的值

我放弃了所有,但我无法想出这一个......请你帮忙 .
What I am doing:
我有一个带有导航栏和tableview作为主屏幕的应用程序 . 在导航栏的顶部我放置了一个UISwitch(它改变了tableview的内容)和一个设置按钮 . 交换机的默认状态是关闭的,当用户翻转它时,我会检查设置中的所有帐户信息是否都已填写,并根据我允许他打开或给他一个提醒(他应该填写)首先输出他的帐户信息)并关闭开关 .
在seetings中的accountView上,我有一个"Save"按钮,如果按下该按钮,则使用NSUserDefaults存储信息,如果填写了所有帐户信息,则使用一个保存为"true"的字符串(保存为FNAccountFiledKey) . My problem:
每次我启动应用程序时,uiSwitch出于一些奇怪的原因,在if语句设置为"false"之前评估FNAccountFiledKey就好像"true"甚至是NSLog . - 有趣的是,如果我转到accountView,按"Save"按钮然后返回,uiSwitch会根据需要开始工作 .

这是我的代码:

switchChanged方法

{
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]);

有没有人知道什么可能导致这种行为?
谢谢

回答(2)

3 years ago

尝试这样的comaparing字符串不要使用 '==' 运算符使用像这样的isEqualToString .

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

}

3 years ago

你应该尝试的第一件事是用这样的“isEqualToString:”替换逻辑运算符“==”

if([accountInfo isEqualToString:[NSString stringWithFormat:@"false"]])
  {
       //Do your stuff here
  }

在NSUserDefault中进行任何更改后不久,您还必须同步它

[[NSUserDefaults standardUserDefaults] synchronize];