我已经全力以赴了,但我就是想不通……需要你的帮助。
我在做什么:
我有一个带有导航栏和 tableview 作为主屏幕的应用程序。在导航栏的顶部,我放置了一个 UISwitch(它改变了 tableview 的内容)和一个设置按钮。开关的默认状态是关闭的,当用户翻转它时,我检查他在设置中的所有帐户信息是否已填写,并基于此我允许他打开或给他一个警报(他应该填写先出他的帐户信息)并保持开关关闭。
在设置中的 accountView 上,我有一个“保存”按钮,如果按下该按钮,它会使用 NSUserDefaults 来存储信息,如果填写了所有帐户信息(保存为 FNAccountFiledKey),还会使用一个字符串保存为“true”。
我的问题:
每次我启动该应用程序时,uiSwitch 都会出于某种奇怪的原因将 FNAccountFiledKey 评估为“真”,即使在 if 语句表示它设置为“假”之前的 NSLog 也是如此。 - 有趣的是,如果我转到 accountView,按下“保存”按钮并返回,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]);
有没有人知道什么会导致这种行为?
谢谢
最佳答案
尝试像这样比较字符串不要使用 '=='
运算符像这样使用 isEqualToString 。
if ([accountInfo isEqualToString:@"false"]) {
}
关于iOS - UISwitch 忽略 NSUserDefaults 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16099444/