【发布时间】:2012-07-02 11:40:25
【问题描述】:
我试图解析JSON string from USGS。但是我收到错误"-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x68a34c0" 基本上,我想将 USGS JSON 解析到 tableview 中。任何人都可以帮忙吗?这是我的代码。
ViewController.h
@interface EarthquakeViewController : UITableViewController
{
NSArray *json;
NSDictionary *earthquakeReport;
}
ViewController.m
- (void)viewDidLoad
{
//content = [NSMutableArray arrayWithObjects:@"one", @"two", nil];
[super viewDidLoad];
[self fetchReports];
}
- (void)fetchReports
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:
[NSURL URLWithString: @"http://earthquake.usgs.gov/earthquakes/feed/geojson/all/hour"]];
NSError* error;
json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
NSLog(@"%@", json);
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
});
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return json.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
earthquakeReport = [json objectAtIndex:indexPath.row];
NSString *country = [[[earthquakeReport objectForKey:@"features"] objectForKey:@"properties"] objectForKey:@"place"];
NSString *mag = [[[earthquakeReport objectForKey:@"features"] objectForKey:@"properties"] objectForKey:@"mag"];
cell.textLabel.text = country;
cell.detailTextLabel.text = mag;
return cell;
}
错误显示在earthquakeReport = [json objectAtIndex:indexPath.row]; 行
【问题讨论】:
-
看起来您已将
json声明为NSArray并尝试访问数组中的某些对象。但是JSONObjectWithData:options:error:将返回一个id对象,并且您似乎JSON 是一个字典,您不能使用objectAtIndex:。 -
请勿将问题标题编辑为“已解决”。公认的答案是我们如何知道它已解决,编辑只是噪音。
标签: objective-c ios json tableview nsjsonserialization