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的没有立即设置。在正确设置布尔值之前,我总是需要按两次登录按钮。

有任何想法吗?

4

1 回答 1

4

布尔值不会立即设置,因为它是在完成块中设置的,在异步操作完成之前不会调用它。您应该做一些事情来让用户在 API 工作时等待。

例如,您可以禁用这些字段并显示一个旋转的进度指示器,直到登录操作完成。您可以在调用 login 之前将 UI 配置为禁用,并在完成块中将其重新设置为启用。

于 2012-12-27T16:34:24.303 回答