Question

I have an IOS app that is using RestKit to pull json formatted data from a server into a CoreData Entity. One of the attributes in the data is a URL for the image associated with the particular article. I'm trying to load that image to my collectionViewController. This is what I've been trying with no success.

From within

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

I am trying this

    NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
    NSURL *photoURL = [object valueForKey:@"imageUrl"];
    NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
    cell.cellimg = [[UIImage alloc] initWithData:photoData];
    [cell.title setText:[object valueForKey:@"title"]];

If I comment out the attempt to grab and load the image the view loads great with a default image and the titles of the articles received from the json data. Based on that I know everything is coming in correctly.

I have also determined that *photoData is being assigned the correct URL. But each time I encounter the NSData line the console prints out "-[__NSCFString isFileURL]: unrecognized selector sent to instance...."

I honestly don't know if this is even the correct way to do this or if it will even work. I am pretty new at this so any help would be great. Given that I am new some small code examples would really help as well as explaining the proper way to approach this.

Just in case here is the header file where I define *cellimg and *title

#import <UIKit/UIKit.h>

@interface GlobismNewsCollectionViewCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UIImage *cellimg;
@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) NSURL *imageUrl;

@end
Was it helpful?

Solution

I think you are using NSString as NSURL. So try to use this one...

NSURL *photoURL = [NSURL URLWithString:(NSString *) [object valueForKey:@"imageUrl"]];

OTHER TIPS

Thanks to Dharmbir I had this issue wrapped up within 25 minutes of asking the question!

To clarify for any new guys like me I changed the line Dharmbir suggested so the block looks like this now

NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSURL *photoURL = [NSURL URLWithString:(NSString *) [object valueForKey:@"imageUrl"]];
NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
[cell.cellimg setImage:[[UIImage alloc] initWithData:photoData]];        
[cell.title setText:[object valueForKey:@"title"]];

Notice the 4th line in the block also changed from this

cell.cellimg = [[UIImage alloc] initWithData:photoData];

to this

[cell.cellimg setImage:[[UIImage alloc] initWithData:photoData]];

I also had to change my *cellimg property to this

@property (strong, nonatomic) IBOutlet UIImageView *cellimg;

from this

@property (strong, nonatomic) IBOutlet UIImage *cellimg;

I had to change to the UIImageView class because the cell in my storyboard is based on the UIImageView Class. Hope this helps a guy in need thanks again Dharmbir!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top