异步下载中停止指示

时间:2011-05-23 10:36:29

标签: iphone multithreading

我将所有图像下载操作添加到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次。

2 个答案:

答案 0 :(得分:0)

您需要确保在主操作线程上进行所有UI调用。因此,显示活动指示器,使其旋转,停止并隐藏它都需要在主线程上完成。

实现这一目标的一种合理方法是在视图控制器中公开方法来执行此操作,并从操作代码中调用它们在主要文件中: -

查找

performSelectorOnMainThread:<(SEL)aSelector> withObject:<(id)arg> waitUntilDone:<(BOOL)wait>

答案 1 :(得分:0)

简单回答,您无法在委托方法实现中检查操作队列。只有一个操作队列完成后才会调用此方法,队列中的任何其他方法都不会调用此方法。

检查初始化它们的队列。