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

tableView unable to display data parsed from the web in json format

我使用 kimono 创建了一个 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

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

提前谢谢你,很抱歉给你带来这样的负担。

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

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