简体   繁体   中英

Populating Data from NSMutableArray in iPhone

I have three arrays and I have copied all these arrays into a single array. All these three arrays are arrays of dictionaries.All arrays has a field called picture, but that pictures is coming from different sources- URL in one array, data in other and files in the third one.

Say, Array1 has dictionaries with a key - picture and its loaded from NSURL . Similarly, Array2 and Array3 has dictionaries with same key name - picture and loaded from ContentofFiles and NSData .

Now, I want to populate tableview, of course,m having Custom UITableViewCell , it has image view as its content view. To load that image, what should I do.

I was doing this thing..

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

But, this will crash if cell.contactImageView.image don't receive image from NSURL.So, what should I do? Any help, will be appreciated

But,

all you is to check if the received image is null and if it is, then set a template photo image called no photo like a photo on facebook when no profile picture is selected

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

If these images are retrieved from the net, i would suggest not using [NSData dataWithContentsOfURL:] .

You should be using a non blocking method, that loads images asynchronously. Using this method on numerous rows in a table will cause performance issues.

Here's my recommendation , use the SDWebImage Library . Easy to use, and even easier to install.

Once you add the library to your project, simply #import the UIImageView+WebCache.h class usage example is below.

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

您可以在字典中再添加一个键,该键将指定从何处拍照,如果您要提供来自其他来源的图像,则可以向cell.contactImageView提供图像。

Thanks a lot buddies for your Quick reply,especially @skram, due to your suggestion,my tableview performance has increased much. the Question, that I have asked,the better answer that I have thought of is using iskindofClass . If image is coming from any class, on a condition ,we can check from where that image was coming and populate our image accordingly.

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

Now, I'm able to populate the tableview properly.Once again thanx to scram .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM