Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialraja nusantara
Courses Plus Student 2,084 PointsDownloading JSON image Problem
Hello guys, i made an exercise for the Master Detail Application regarding how to downloading the data using JSON and display it in table view. I can set the title and author using JSON but i have a little problem with images ( thumbnail ). The code doesn't give me any error but when i ran the application they give me an error " [__NSCFString isFileURL]: unrecognized selector sent to instance 0x8c9d5c0 " . Here is my code for MasterViewController.h
#import <UIKit/UIKit.h>
@interface MasterViewController : UITableViewController
@property (strong, nonatomic) NSArray *tajuk;
@end
and here is my code for MasterViewController.m
#import "MasterViewController.h"
#import "DetailViewController.h"
@interface MasterViewController () {
NSMutableArray *_objects;
}
@end
@implementation MasterViewController
- (void)awakeFromNib
{
[super awakeFromNib];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//self.tajuk = [NSArray arrayWithObjects:@"barca",@"kelate",@"jdt", nil];
NSURL *url = [NSURL URLWithString:@"http://blog.teamtreehouse.com/api/get_recent_summary/"];
NSData *jsonData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
self.tajuk = [dataDictionary objectForKey:@"posts"];
// NSLog(@"%@", dataDictionary);
self.navigationItem.leftBarButtonItem = self.editButtonItem;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)insertNewObject:(id)sender
{
if (!_objects) {
_objects = [[NSMutableArray alloc] init];
}
[_objects insertObject:[NSDate date] atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.tajuk.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSDictionary *dataFromWeb = [self.tajuk objectAtIndex:indexPath.row];
// self.URL = [NSURL URLWithString:[dataFromWeb objectForKey:@"thumbnail"]];
// NSString *object = self.tajuk[indexPath.row];
cell.textLabel.text = [dataFromWeb objectForKey:@"title"];
// NSLog(@"%@", [dataFromWeb objectForKey:@"thumbnail"]);
if([[dataFromWeb objectForKey:@"thumbnail"] isKindOfClass:[NSString class]]) {
NSData *imageData = [NSData dataWithContentsOfURL:[dataFromWeb objectForKey:@"thumbnail"]];
UIImage *image = [UIImage imageWithData:imageData];
cell.imageView.image = image;
NSLog(@"%@", [dataFromWeb objectForKey:@"thumbnail"]);
} else {
cell.imageView.image = nil;
}
return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSDictionary *dataWeb = [self.tajuk objectAtIndex:indexPath.row ];
NSString *objek = [dataWeb objectForKey:@"author"];
//NSString *object = self.tajuk[indexPath.row];
[segue.destinationViewController setDetailItem:objek];
}
}
@end
I got a breakpoint error at this line
NSData *imageData = [NSData dataWithContentsOfURL:[dataFromWeb objectForKey:@"thumbnail"]];
3 Answers
Thomas Nilsen
14,957 Points[NSData dataWithContentsOfURL:] takes an NSURL. You need to put [dataFromWeb objectForKey:@"thumbnail"] (which is a string), into an NSURL first.
It would look something like this:
NSURL *url = [NSURL URLWithString:[dataFromWeb objectForKey:@"thumbnail"]];
NSData *imageData = [NSData dataWithContentsOfURL:url];
raja nusantara
Courses Plus Student 2,084 PointsThanks Thomas, now i solved my problem.
raja nusantara
Courses Plus Student 2,084 PointsThanks Thomas, now i solved my problem.