UIImage无法正常工作?

时间:2012-03-26 06:47:17

标签: iphone objective-c ios ipad asynchronous

我试图在UITableViewCell中异步加载来自服务器的UIImages。 我的代码在模拟器中工作正常,但在设备上没有。我的代码如下,

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 IScopeCustomTableCell *cell = (IScopeCustomTableCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];

if (!cell){
    NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
    cell = [topLevelItems objectAtIndex:0];
}

cell.delegate = self;
cell.videoTitle.text = [[videoDataArray objectAtIndex:indexPath.row] objectForKey:@"VideoTitle"];
cell.videoLink = [[videoDataArray objectAtIndex:indexPath.row] objectForKey:@"VideoLink"];
cell.videoThumbnailImageLink = [[videoDataArray objectAtIndex:indexPath.row] objectForKey:@"VideoThumbnail"];
cell.videoThumbnail.tag = indexPath.row;
cell.tag = indexPath.row;
[cell.activityIndicator startAnimating];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                    initWithTarget:self
                                    selector:@selector(loadImage:)
                                    object:cell];
[queue addOperation:operation];
return cell;
}

- (void)loadImage:(IScopeCustomTableCell *)cell {
NSLog(@"Image link :- %@", cell.videoThumbnailImageLink);

//NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:cell.videoThumbnailImageLink]];
NSData* imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.videoThumbnailImageLink]];
UIImage* image = [UIImage imageWithData:imageData];

cell.videoThumbnail.image = image;
[cell.activityIndicator stopAnimating];
[cell.activityIndicator removeFromSuperview];

//[self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];
}

上面的代码在模拟器上很好但在设备上没有,becoz,UIImage * image get(0X0)null,即使NSData loadImage方法包含适当的数据。

2 个答案:

答案 0 :(得分:0)

你正在做的不是最好的方法,因为它会创建许多自动释放的对象,并会增加你的应用程序的大小,你也不会发布你的operation ...所以首先发布operation之后的[queue addOperation:operation];

并使用此代码来获取图像数据并将其存储在图像中...

NSData* data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:cell.videoThumbnailImageLink]]];
UIImage* img = [[UIImage alloc] initWithData:data];
[data release];
cell.videoThumbnail.image = image;
[img release];

希望这能解决你的问题..

答案 1 :(得分:0)

此链接包含图像缓存代码,并且它可以正常工作,我想要。

https://github.com/jakemarsh/JMImageCache