从iPhone中的NSMutableArray填充数据

时间:2012-06-07 06:45:18

标签: iphone objective-c uitableview nsmutablearray

我有三个数组,我已将所有这些数组复制到一个数组中。所有这三个数组都是字典数组。所有数组都有一个名为picture的字段,但图片来自不同的来源 - 一个数组中的URL,另一个数组中的数据和第三个数据中的文件。

说,Array1有一个带有关键图片的字典,它是从NSURL加载的。 同样,Array2和Array3的词典具有相同的键名 - 图片,并从ContentofFilesNSData加载。

现在,我想填充tableview,当然,我有Custom UITableViewCell,它有图像视图作为其内容视图。要加载该图像,我该怎么做。

我正在做这件事......

NSURL *url  = [NSURL URLWithString:[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"]];
cell.contactImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

但是,如果cell.contactImageView.image没有收到来自NSURL的图像,这会崩溃。所以,我该怎么办?任何帮助,将不胜感激

但是,

4 个答案:

答案 0 :(得分:3)

所有你要检查收到的图像是否为空,如果是,那么在没有选择个人资料图片的情况下,在Facebook上设置一个名为照片的模板照片图像

    UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
    if (img)
       cell.contactImageView.image = img;
    else
       cell.contactImageView.image = [UIImage imageNamed:@"no_photo.png"];

答案 1 :(得分:1)

如果从网上检索这些图像,我建议不要使用[NSData dataWithContentsOfURL:]

您应该使用非阻塞方法,以异步方式加载图像。在表中的多行上使用此方法将导致性能问题。

这是我的建议,请使用SDWebImage Library。易于使用,甚至更易于安装。

将库添加到项目后,只需#import下面的UIImageView+WebCache.h课程用法示例。

 [cell.contactImageView.image setImageWithURL:[NSURL URLWithString:[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"]]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

答案 2 :(得分:0)

如果你想提供来自不同来源的图像,你可以在字典中再添加一个键来指定从哪里拍摄照片,因此你可以为cell.contactImageView提供图像。

答案 3 :(得分:0)

非常感谢您的快速回复,特别是@skram,由于您的建议,我的tableview性能提升了很多。问题,我问过,我想到的更好的答案是使用iskindofClass。如果图像来自任何类别,在某种情况下,我们可以检查该图像的来源,并相应地填充我们的图像。

if ([[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"] isKindOfClass:[UIImage class]]) 
    {
        cell.contactImageView.image = [[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"];
    }
    else if ([[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"] isKindOfClass:[NSString class]]) 
    {
        cell.contactImageView.image = [[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"];
    }
    else if([[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"] isKindOfClass:[NSURL class]])
    {
        [cell.contactImageView setImageWithURL:[NSURL URLWithString:[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"]]placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    }

现在,我可以正确填充tableview。再次感谢scram