1

USGS から JSON 文字列を解析しようとしていました。ただし、エラーが発生します"-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x68a34c0"基本的に、USGS JSONをテーブルビューに解析したいと思います。誰でも助けることができますか?これが私のコードです。

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];

4

1 に答える 1

1

Web ブラウザー ( http://earthquake.usgs.gov/earthquakes/feed/geojson/all/hour ) で JSON データを見ると、アクセスしようとしている配列がルート レベルにないことに気付くはずです。ルート レベルはディクショナリで、探している配列は "features" キーにあります。

適切にアクセスするには、まずjsonivar 宣言を次のように変更しますNSDictionary

NSDictionary *json;

次に、tableView:cellForRowAtIndexPath:メソッドで、次のようにレポートにアクセスします。

earthquakeReport = [[json objectForKey:@"features"] objectAtIndex:indexPath.row];
于 2012-07-02T07:27:46.570 に答える