图像的异步加载-如果取消分配,则会崩溃

|| 我有一个由导航控制器呈现的UIViewController。此UIViewController异步加载图像,如下所示:
[self performSelectorInBackground:@selector(downloadData) withObject:nil];
 - (void)downloadData {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    LocationDetails * details = [[LondonDatabase database] locationDetails : UniqueID];

    NSData * imageData = [NSData dataWithContentsOfURL : [NSURL URLWithString : [details image]]];
    picture = [[UIImage alloc ]initWithData:imageData];

    [self performSelectorOnMainThread : @selector(updateUI) withObject : nil waitUntilDone : NO];

    [pool release];

}
问题是,如果在执行上述方法时应用程序将视图控制器从堆栈中弹出,则应用程序崩溃并显示错误:   bool _WebTryThreadLock(bool),0x61b3950:尝试获取网络锁   来自主线程或Web线程以外的其他线程。这可能   是从辅助线程调用UIKit的结果。崩溃   现在... 有人可以帮忙吗? 谢谢, 马丁     
已邀请:
使用NSThread并在视图控制器对象中保留该句柄。当视图控制器取消分配时,取消线程(假设它尚未完成)。在downloadData中,请在尝试访问视图控制器的元素之前检查线程是否未被取消。也就是说,如果线程已取消,则只需返回即可。我有一个类似的问题,这就是我解决的方法。 这是代码(将图像加载到自定义表格单元格中): -(void)displayImage:(id)上下文 {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];     UIImage * image =(UIImage *)上下文;     [spinner stopAnimating];     brandImage.image =图片;     [brandImage setNeedsDisplay];     [池释放]; } -(无效)fetchImage:(id)上下文 {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];     NSString * url =(NSString *)上下文;     如果([[[NSThread currentThread] isCancelled])         返回;     UIImage * image = [ArtCache imageForURL:url];     如果(![[[NSThread currentThread] isCancelled]){         [自我performSelectorOnMainThread:@selector(displayImage :) withObject:image waitUntilDone:NO];     }     [池释放]; } -(void)showBrandImageURL:(NSString *)url {     [spinner startAnimating];     brandImage.image = nil;     如果(imageLoadThread){         [imageLoadThread取消];         [imageLoadThread发布];     }     imageLoadThread = [[NSThread alloc] initWithTarget:自我选择器:@selector(fetchImage :) object:url];     [imageLoadThread setThreadPriority:0.8];     [imageLoadThread开始]; } 这是定制表单元格类中的3种方法。最后一个是来自
cellForRowAtIndexPath:
的那个。其他两个支持一个称为。     

要回复问题请先登录注册