tableView无法以json格式显示从Web解析的数据

时间:2015-01-10 15:51:32

标签: ios json uitableview

我使用和服创建了一个api,这是我的代码。

#import "PlayerRankingsTableViewController.h"
#import "RankingsTableViewCell.h"

#define kBgQueue dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define kPlayerRankingsURL [NSURL URLWithString:@"https://www.kimonolabs.com/api/bg6tcuuq?apikey=xgp4nU6xA9UcBWSe0MIHcBVbAWz5v4wR"]


@interface PlayerRankingsTableViewController () {

}

@property (nonatomic, strong) NSArray *playerRankings;

@end

@implementation PlayerRankingsTableViewController


- (void)viewDidLoad {

[super viewDidLoad];


dispatch_async(kBgQueue, ^{
    NSData *data = [NSData dataWithContentsOfURL:
                    kPlayerRankingsURL];
    [self performSelectorOnMainThread: @selector(initializePlayerRankingsArray:)
                           withObject:data waitUntilDone:YES];
});

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be rexrcreated.
}

- (NSArray *)initializePlayerRankingsArray:(NSData *)responseData {
NSError* error;
NSDictionary *json = [NSJSONSerialization
                      JSONObjectWithData:responseData
                      options:kNilOptions
                      error:&error];

NSArray *myPlayerRankings = [[json objectForKey:@"results"]objectForKey:@"collection1"];
self.playerRankings = myPlayerRankings;
NSLog(@"%@", self.playerRankings);

return self.playerRankings;

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [self.playerRankings count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RankingsTableViewCell *cell = (RankingsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];

if (cell == nil) {
    cell = (RankingsTableViewCell *)[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}

NSDictionary *rankings = [self.playerRankings objectAtIndex: indexPath.row];

NSString *rank = [rankings objectForKey:@"rank"];
NSString *name = [rankings objectForKey:@"name"];
NSString *points = [rankings objectForKey:@"points"];


[cell.playerRank setText:rank];
cell.playerName.text = name;
cell.playerPoints.text = points;


return cell;
}

@end

我认为数据解析过程没有任何问题,因为控制台会正确显示从网络解析的数据。 但是,当我运行应用程序时,我只看到一张空桌子。 同样,我认为这对编程来说可能是一件简单而又新的事。

提前谢谢你,抱歉这是一个负担。

1 个答案:

答案 0 :(得分:0)

initializePlayerRankingsArray:中你不应该返回数组,因为它没有任何东西可以接收它。您已经设置了self.playerRankings,这就足够了。

此方法缺少的是[self.tableView reloadData];(应该是self.playerRankings设置后的最后一行)。