UIImage не работает должным образом? - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь загрузить UIImages с сервера асинхронно в UITableViewCell. Мой код прекрасно работал в симуляторе, но не на устройстве. Мой код выглядит следующим образом:

- (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];
}

Приведенный выше код отлично работает на симуляторе, но не на устройстве, потому что UIImage * image get (0X0) null, хотя метод loadDmage NSData содержит соответствующие данные.

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

Эта ссылка содержит код кеша изображений, и он работал правильно, точно так, как мне хотелось бы.

https://github.com/jakemarsh/JMImageCache

0 голосов
/ 26 марта 2012

То, что вы делаете, не лучший способ сделать это, так как это создаст много автоматически выпущенных объектов и увеличит размер вашего приложения, а также вы не выпускаете 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];

в надежде, что это решит вашу проблему ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...