0

我使用异步进行发布请求

[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];

}

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

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

4

2 回答 2

0

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

于 2013-04-13T15:05:53.157 回答
0

两个主要问题:

  1. 如果您使用 的sendAsynchronousRequest:(等)方法NSURLConnection,则完成时只会调用完成块,而connectionDidFinishLoading:委托方法则不会。那是另一个 API。

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

    dispatch_sync(dispatch_get_main_queue(), ^{ [self stopAnimatingSpinner]; });

于 2013-04-13T14:33:06.887 回答