【问题标题】:Boolean does not get set on the right moment布尔值没有在正确的时刻设置
【发布时间】:2012-12-13 00:46:05
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 第一次初始化布尔值是什么时候?

标签: iphone objective-c ios boolean


【解决方案1】:

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

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

【讨论】:

  • 代码很大程度上取决于您的 UI 设计,因此我们无法为您提供具体信息。如果您想要一个短期解决方案,请考虑使用 API 的同步方法(如果它具有同步方法)。否则,您始终可以使用 NSLock 或 GCD 互斥锁让主线程等待直到执行完成块。
  • 我对此很陌生。我正在使用 AFNetworking 库进行通话。
  • AFNetworking 对象继承自 NSOperation。您只需在调用 start 后对 AF 请求操作调用 waitUntilFinished 即可让当前线程等待操作完成。
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 2018-07-09
  • 2018-08-11
相关资源
最近更新 更多