DaffodilGirl
DaffodilGirl
采纳率78.1%
2013-01-16 02:08 阅读 5.5k
已采纳

dismissViewControllerAnimated有延迟

dismissViewControllerAnimated:completion:在应用中运行正常,就是不知道为什么出现了几秒钟的延迟:

[api loginWithUsername:[dict objectForKey:@"username"] andPassword:[dict objectForKey:@"password"] andSuccessBlock:^(id json) {
    NSLog(@"DONE... %@", [json objectForKey:@"status"]);
    NSString *status = [json objectForKey:@"status"];
    if([status isEqualToString:@"ok"]){
        app.user = [json objectForKey:@"data"];
        [self dismissViewControllerAnimated:YES completion:nil];
    }else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"could not log you in" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    }
}];

在控制台可以看见DONE... ok。,意味着回调block执行正常,但是接下来需要三四秒钟延迟视图才能最终被dismiss。

怎么解决这个延迟问题?谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    Chengzi_963 Chengzi_963 2013-01-16 06:20

    如果你不能保证UI代码运行在主线程中,它可能就运行到其他地方去了,这样的话会出现几秒钟的延迟。

    添加下面的代码可以让dismissal运行在主线程中:

    dispatch_async(dispatch_get_main_queue(), ^{
        [self dismissViewControllerAnimated:YES completion:nil]
    });
    
    点赞 评论 复制链接分享
  • ccf0703 webfrogs 2013-01-16 05:37

    代码只给了一部分,无法看出什么问题。
    从这个函数名上推测:应该是使用用户名密码登录时请求了网络连接,视图dismiss的这个三四秒中的延迟应该是网络连接造成的。而这个网络连接没有使用异步,或者是使用了异步连接但是SuccessBlock里的代码段只会在网络连接请求成功后调用。

    建议将dismiss放到别的地方去。

    点赞 1 评论 复制链接分享

相关推荐