0

必要に応じて、ログインダイアログとログインエラーダイアログを表示したい。

UIAlertViewを使用してこれらのダイアログを表示していますが、UIAlertViewを表示している間、プロセスは実行され続けます。

以下にコードを書きました。NSUserDefaultsはこれらの値を保持しないため、ログインダイアログが表示され、ボタンがタップされるまで待ちます。

ただし、これを実行するとエラーダイアログが表示され、[OK]をタップするとログインダイアログが表示されます。

どうすればこれを修正できますか?

前もって感謝します。

- (void)storeEvernote
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    evID = [defaults stringForKey:@"evID"];
    evPW = [defaults stringForKey:@"evPW"];
    NSLog(@"%@", evID);

    if( evID == NULL || evPW == NULL )
    {
        login = true;
        [self showLoginDialogue];
    }
    else
    {
        evernoteID = evID;
        evernotePW = evPW;
    }
    if( evernoteID == NULL || evernotePW == NULL )
    {
        login = false;
        [self showErrMessage];
        return;
    }
    [self getEvernoteNotebooks];
}

- (void)showLoginDialogue
{
    UIAlertView *loginDialogue = [[UIAlertView alloc] initWithTitle:@"Evernote Login"     message:@"Enter your Evernote Info" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login", nil];
    loginDialogue.delegate = self;
    loginDialogue.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

    [loginDialogue show];
}

- (void)showErrMessage
{
    UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@"Login Failure" message:@"Invalid ID & Password" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [loginalert show];
}
4

1 に答える 1

0

そのstoreEvernoteメソッドが最初に実行さevIDれ、最初evPWがtrueである場合、それは2番目に続き、それでも2番目のステートメントの条件もtrueであるため、を示します。これを修正するには、2番目のステートメントを移動してALSO ADDのメソッドを最初のステートメントの最後に委任します(例:NULLifLoginDialogeifevernoteIDevernotePWNULLiferrorMessageifloginDialoguereturn;if

- (void)storeEvernote
{

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    evID = [defaults stringForKey:@"evID"];
    evPW = [defaults stringForKey:@"evPW"];
    NSLog(@"%@", evID);
if( evID == NULL || evPW == NULL )
{
    login = true;
    [self showLoginDialogue];
    return;
}
else
{
    evernoteID = evID;
    evernotePW = evPW;
}

[self getEvernoteNotebooks];
}

//The login dialoge delegate method:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
   //Process user input
      ...
   if( evernoteID == NULL || evernotePW == NULL )
    {
        login = false;
        [self showErrMessage];
        return;
    }
    [self getEvernoteNotebooks];
}
于 2012-06-23T04:30:59.567 に答える