停止UIACtivityIndicatorView气质的iOS
我使用异步停止UIACtivityIndicatorView气质的iOS
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
我有回调的POST请求时,连接已经停止,在这里我把我的方法,停止UIActivityIndicatorView
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSLog(@"Connection finish");
[self stopAnimatingSpinner];
}
继承人停止动画方法(我已经尝试了一种组合,并且所有的下面的停止,删除隐藏方法
-(void)stopAnimatingSpinner{
[submittingActivity stopAnimating];
submittingActivity.hidden = YES;
[submittingActivity removeFromSuperview];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
现在,问题有时会停止,有时它并不是非常随机的。如果我将活动的停止移动到完成数据的解析而不是依赖连接回调,则行为完全相同。有时候他们有时候会停下来呢?
我能想到的唯一的事情是,连接阻塞主线程,但为什么它的工作有时而不是别人?
两个主要问题:
如果您使用的
NSURLConnection
的sendAsynchronousRequest:
(等)的方法,则仅完成块将被完成后调用,并且connectionDidFinishLoading:
委托方法是没有的。这是另一个API。-
如果要更新的用户界面,你应该总是这样做在主线程上。否则你的程序调用未定义的行为。所以包裹其停止动画这是最主要的线程调度块代码:
dispatch_sync(dispatch_get_main_queue(), ^{ [self stopAnimatingSpinner]; });
嗨H2CO3我确实认为它可能是我会给这个尝试并报告回来。谢谢 –
这似乎使应用程序崩溃,并变得无反应,即无法做任何事情,没有在日志中......我做过之前尝试... dispatch_async(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),{{0}加工 });但它会在一段时间后停止,但不是当我期望它时? –
@AlexMcPherson我不明白第二个问题,请您重新解释一下吗? – 2013-04-13 14:53:15
如果从主线程调用NSURLConnection
,那么你完成处理器也将被从主线程调用。因此,停止微调器时不应调用dispatch_sync
。
我改变它dispatch_async,这似乎工作将做一些更多的测试。 –
在这种情况下,我认为你完全不需要使用GCD,因为完成处理程序已经在主线程中。所以,只需调用[self stopAnimatingSpinner]即可。 – sixthcent
恐怕不是因为我一直这样做,这个问题的原因有时会引发其他人不是这个异步是最稳定的,直到没有和尚未工作,但将继续测试它。 –
您是否每次都在控制台上打印“连接完成”? –
@GauravWadhwani是的,我总是得到日志,所以被称为只是用户界面的方法不会更新..很奇怪,因为有时它可以帮助别人不是? –
尝试注释'removeFromSuperView',然后尝试..am猜测它可能工作..或者如下面的答案中提到的H2CO3,在主线程上运行UI更新,如果您还没有这样做.. –