0

BOOL loginStatusログインフローで使用するものがあります。


コード

- (IBAction)login:(id)sender {
    if ([self credentialsValidated]) {
            [self performSegueWithIdentifier:@"showLogin" sender:self];
     }else {
       NSLog(@"not valid");
     }
}

- (BOOL)credentialsValidated {
     [[API sharedInstance] loginCommand:[NSMutableDictionary dictionaryWithObjectsAndKeys:_txtLogin.text,@"email",_txtPass.text,@"pwd", nil] onCompletion:^(NSDictionary *json){
     //completion
         if(![json objectForKey:@"error"]){
             if([[json valueForKeyPath:@"data.status"]intValue] == 200){
                //Create user object
                 NSLog(@"tot hier");
                loginstatus =  YES;
             }else{
                 //show validation
                 NSString *message = [NSString stringWithFormat:@"%@",[json valueForKeyPath:@"data.text"]];
                 [[[UIAlertView alloc]initWithTitle:@"Fout" message:message delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]show];
                 _txtLogin.text = @"";
                 _txtPass.text = @"";
                 loginstatus = NO;
             }
         }else {
             NSLog(@"Cannot connect to the server");
         }
     }];
     if(loginstatus){
         NSLog(@"true");
    }else{
        NSLog(@"false");
    }
     return loginstatus;
}

私が抱えている問題は、自分BOOLがすぐに設定されないことです。ブール値が正しく設定される前に、常にログインボタンを2回押す必要があります。

何か案は?

4

1 に答える 1

4

ブール値は、非同期操作が完了するまで呼び出されない完了ブロックに設定されているため、すぐには設定されません。APIが機能している間、ユーザーが待機できるようにするために何かを行う必要があります。

たとえば、ログイン操作が完了するまで、フィールドを無効にして、回転する進行状況インジケーターを表示できます。ログインを呼び出す前にUIを無効に設定し、完了ブロックで有効に戻すように設定します。

于 2012-12-27T16:34:24.303 に答える