停止UIACtivityIndi​​catorView气质iOS

时间:2013-04-13 14:24:36

标签: ios nsurlconnection uiactivityindicatorview nsurlconnectiondelegate

我使用Async

发布帖子请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

我有连接停止时的回调,在这里我调用我的方法来停止UIActivityIndi​​catorView

-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSLog(@"Connection finish");
[self stopAnimatingSpinner];
}

继续使用停止动画方法(我尝试了一个组合,以下所有停止,删除隐藏方法

-(void)stopAnimatingSpinner{

[submittingActivity stopAnimating];
submittingActivity.hidden = YES;
[submittingActivity removeFromSuperview];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

}

现在问题有时它会停止,有时它不会并且非常随机。如果我将活动的停止移动到我的数据的完成解析而不是依赖于连接回调,则行为完全相同。有时他们有时会停下来吗?

我唯一能想到的是连接阻塞主线程,但为什么它有时会工作而不是其他工作?

2 个答案:

答案 0 :(得分:0)

两个主要问题:

  1. 如果使用sendAsynchronousRequest:的{​​{1}}(等)方法,则只有完成时才会调用完成块,而NSURLConnection委托方法不会。这是另一个API。

  2. 如果您正在更新UI,则应该始终在主线程上执行此操作。否则您的程序会调用未定义的行为。因此,将动画停止的代码包装在主线程上调度的块中:

    connectionDidFinishLoading:

答案 1 :(得分:0)

如果从主线程调用NSURLConnection,那么也将从主线程调用完成处理程序。因此,在停止微调器时不应调用dispatch_sync