0

私はそれをすべて与えましたが、これを理解することはできません.あなたの助けが必要です.
私がやっていること:
メイン画面としてナビゲーションバーとテーブルビューを備えたアプリがあります。ナビゲーションバーの上部に、UISwitch (テーブルビューのコンテンツを変更する) と設定ボタンを配置しました。スイッチのデフォルト状態はオフで、ユーザーがスイッチをオンにすると、設定内のすべてのアカウント情報が入力されているかどうかを確認し、それに基づいて、スイッチをオンにすることを許可するか、アラート (入力する必要があること) を通知します。最初に彼のアカウント情報をアウト) とスイッチをオフのままにします。
設定の accountView には、「保存」ボタンがあり、これを押すと、NSUserDefaults を使用して情報を保存し、すべてのアカウント情報が入力された場合 (FNAccountFiledKey として保存)、「true」として保存する 1 つの文字列も使用します。 私の問題:
アプリを起動するたびに、uiSwitch は何らかの奇妙な理由で、IF ステートメントが「false」に設定されていると言う直前の NSLog であっても、「true」であるかのように FNAccountFiledKey を評価します。- 興味深いことに、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]);

誰かがこの動作を引き起こす可能性のあるアイデアを持っていますか?
ありがとう

4

2 に答える 2

3

'=='この isEqualToString のような演算子の使用を使用しないで、文字列を比較するためにこのようにしてください。

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

}
于 2013-04-19T07:28:06.773 に答える
0

最初に試す必要があるのは、次のように論理演算子「==」を「isEqualToString:」に置き換えることです

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

また、 NSUserDefault に変更を加えた直後に、それを同期する必要もあります

  [[NSUserDefaults standardUserDefaults] synchronize];
于 2013-04-19T07:45:38.787 に答える