异步下载中的停止指示器

问题描述

| 我将所有图像下载操作添加到Nsoperationqueue中。但是有时指示器会永远显示在这里,我粘贴了一些代码。有什么办法可以停止指示器。在这里,我正在检查\“ operationcount \\”。如果它变成1表示它的最后一次操作,所以我正在停止指示器,但有时它不起作用,将不胜感激。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
 {
//filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0] stringByAppendingPathComponent:self.iconImage];
myobject.iconImage  = [[UIImage alloc] initWithContentsOfFile:self.filename];
myobject.isImageLoaded = YES;

[self willChangeValueForKey:@\"isFinished\"];
[self willChangeValueForKey:@\"isExecuting\"];
finished = YES;
executing = NO;
[self didChangeValueForKey:@\"isExecuting\"];
[self didChangeValueForKey:@\"isFinished\"]; 


NSLog(@\"finsh\");

AboutUSAppDelegate *appdel=(AboutUSAppDelegate*)[UIApplication sharedApplication].delegate;
NSLog(@\"%d\",[appdel.queue operationCount]);
if ([appdel.queue operationCount]==1) {
    //code to stop indicator 
    //Using main thread
}
在这里,我为操作计数添加了Nslog,但有时它会两次打印最后一个值2。其他值只有1倍。     

解决方法

您需要确保所有UI调用都是在操作主线程上进行的。因此,显示活动指示器,使其旋转,停止并隐藏它都需要在主线程上完成。 实现此目标的合理方法是在视图控制器中公开方法以实现此目的,并从Operation代码内部在主方法上调用它们: 抬头
performSelectorOnMainThread:<(SEL)aSelector> withObject:<(id)arg> waitUntilDone:<(BOOL)wait>
    ,简单的答案,您不能在委托方法实现中检查操作队列。当只有一个操作队列完成时,将调用此方法,但是队列中的任何其他方法都不会调用此方法。 检查您在其中初始化它们的队列。