我有一个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
没有立即设置。在布尔值设置正确之前,我总是需要按两次登录按钮。
有什么想法吗?
答案 0 :(得分:4)
布尔值未立即设置,因为它是在完成块中设置的,在异步操作完成之前不会调用它。您应该做一些事情以允许用户在API工作时等待。
例如,您可以禁用字段并显示旋转进度指示器,直到登录操作完成。您可以在调用登录之前将UI配置为禁用,并在完成块中将其重新设置为启用。