AFNetworking解析JSON url图像错误

问题描述:

我正在使用AFNetworking从JSON文件解析图像,链接和时间到我的iPhone应用程序。AFNetworking解析JSON url图像错误

的JSON结构看起来是这样的:

[ 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"19 minutes 'ago' " 
    }, 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"45 minutes 'ago' " 
    }, 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"2 hours 'ago' " 
    }, 
    { 
     "link":"http:\/\/link-to-picture.jpg", 
     "title":"Title", 
     "published":"2 hours 'ago' " 
    } 

] 

而且我对应用程序的代码如下所示:

#import "ViewController.h" 

#import "AFNetworking.h" 

@implementation ViewController 

@synthesize tableView = _tableView, activityIndicatorView = _activityIndicatorView, movies = _movies; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Setting Up Table View 
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.view.bounds.size.height) style:UITableViewStylePlain]; 
    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    self.tableView.hidden = YES; 
    [self.view addSubview:self.tableView]; 

    // Setting Up Activity Indicator View 
    self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    self.activityIndicatorView.hidesWhenStopped = YES; 
    self.activityIndicatorView.center = self.view.center; 
    [self.view addSubview:self.activityIndicatorView]; 
    [self.activityIndicatorView startAnimating]; 

    // Initializing Data Source 
    self.movies = [[NSArray alloc] init]; 

    NSURL *url = [[NSURL alloc] initWithString:@"http://link-to-json-file.com/pictureparse.php?name=Name"]; 
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     self.movies = [JSON objectForKey:@"results"]; 
     [self.activityIndicatorView stopAnimating]; 
     [self.tableView setHidden:NO]; 
     [self.tableView reloadData]; 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
     NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); 
    }]; 

    [operation start]; 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

// Table View Data Source Methods 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (self.movies && self.movies.count) { 
     return self.movies.count; 
    } else { 
     return 0; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellID = @"Cell Identifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID]; 
    } 

    NSDictionary *movie = [self.movies objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [movie objectForKey:@"title"]; 
    cell.detailTextLabel.text = [movie objectForKey:@"published"]; 

    NSLog(@"Blabla: %@"), movie; 

    NSURL *url = [[NSURL alloc] initWithString:[movie objectForKey:@"link"]]; 
    [cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"]]; 

    return cell; 
} 

@end 

但是,当我启动应用程序,我得到这个错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x8d40ac0' 

我在做什么错了?

你的json对象似乎是一个有字典的数组。 NSArray没有objectForKey:方法。您必须从数组中获得您感兴趣的字典对象,然后使用键获取值。

编辑。

如果您的财产self.movies有适当的类型,并且您想简单地将json数组分配给它,请尝试self.movies = JSON;(JSON对象已经是一个字典数组)。

+0

好的,我该怎么做? – tracifycray

+0

应该self.movi​​es = JSON;在cellForRowAtIndexPath? – tracifycray

+0

不确定我是否正确,但不是。 'self.movi​​es'将是一个数据字典数组,您可以使用它来填充表格视图单元格的字段。 –