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对象已经是一个字典数组)。
好的,我该怎么做? – tracifycray
应该self.movies = JSON;在cellForRowAtIndexPath? – tracifycray
不确定我是否正确,但不是。 'self.movies'将是一个数据字典数组,您可以使用它来填充表格视图单元格的字段。 –