IOS图像未在图像视图中设置

时间:2013-01-28 00:03:06

标签: ios uiimageview tablecell

我在我的两个视图控制器中使用相同的代码(他们正在实现相同的类,他们下载的URL会发生变化),并且在一个场合中,图像显示为correclty,而在另一个场景中,我确实看到一个空单元格。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier=@"MyCell";
    //this is the identifier of the custom cell
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    tableView.backgroundColor=[UIColor clearColor];
    tableView.opaque=NO;
    tableView.backgroundView=nil;

    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    NSLog(@"Image url is:%@",[images_url objectAtIndex:indexPath.row]);
    NSURL *url_image=[NSURL URLWithString:[images_url objectAtIndex:indexPath.row]];

    cell.myimage.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:url_image]];


    return cell;
}

正如我告诉过你的,我有2个视图控制器实现了同一个类。在视图中加载url是根据标志的值设置的。如果我打开控制器A,我看不到图像,如果我打开视图B我可以看到图像。这两个网址都是正确的,因为我可以使用我插入的NSLog来检查它。

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

不幸的是,调用“NSData dataWithContentsOfURL”是一个阻塞调用。程序的执行将停止,直到iOS能够从服务器获取所有数据或尝试失败。如果您使用的是LTE或WiFi,这通常可能会“快速”;但可能需要很长时间。

与此同时,您正处于应用中的“主线程” - 因此您的应用似乎会冻结,系统的看门狗定时器可能会杀死您的应用。如果除了你之外的任何人都会使用这个ap,你绝对需要使用立即检索的本地数据或使用异步方法填充tableview单元格的图像。

只是谷歌“懒惰加载UIImage”。这个问题在这个问题上有一些很好的提示: lazy-load-images-in-uitableview

此外,您应该将这些行移动到某些设置代码。每次更新单元格时都不需要执行它们:

tableView.backgroundColor=[UIColor clearColor];
tableView.opaque=NO;
tableView.backgroundView=nil;

祝你好运!