我需要使用一个线程来从网络中检索图像并将其分配到图像视图中。
我已经将NSOperation子类化,并从我的视图控制器调用它,如:
NSOperation *operation = [[[GetImage alloc] init] autorelease];
[queue addOperation:operation];
我的图像很好但是如何分配我的NSOperation类中的图像?我将图像存储在名为RetrievedImage的UIImage中:
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
retrievedImage = [[UIImage alloc] initWithData:imageData];
[imageData release];
我现在如何将其导入ViewController的ImageView?
由于
答案 0 :(得分:4)
你使用委托。
你的NSOperation:
- (void)main {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://sstatic.net/stackoverflow/img/apple-touch-icon.png"]];
UIImage *image = [UIImage imageWithData:data];
[delegate fetchedImage:image];
[pool drain];
}
你的代表:
- (void)fetchedImage:(UIImage *)image {
if (![NSThread isMainThread]) {
[self performSelectorOnMainThread:_cmd withObject:image waitUntilDone:NO];
return;
}
self.imageView.image = image;
}
重要的部分是检查您是否在主线程上运行的部分 您无法从另一个线程访问界面元素。因此,如果您不在主线程上,则在主线程上启动相同的方法
答案 1 :(得分:0)
你有几个选择:
我个人更喜欢NSNotification这类事情 - 它实际上与foursquare的fully-loaded项目非常相似。
答案 2 :(得分:0)
尝试使用HJCache,它是为这种东西制作的: http://www.markj.net/hjcache-iphone-image-cache/
答案 3 :(得分:-2)
ImageView有一个图像属性,请尝试访问它。