我是初学者,我已经阅读了有关我的问题的StackOverflow上的所有内容 - 我的带有json数据的应用程序在TableViewController上没有显示任何内容。我可能错过了一些明显的东西,但非常感谢帮助。 (我正在使用最新的Xcode 5 DP,如果它很重要的话)。
TableVC.h
@interface TableVC : UITableViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) NSDictionary *kinos;
@property (retain, nonatomic) UITableView *tableView;
-(void)fetchKinos;
@end
TableVC.m
文件是
@interface TableVC ()
@end
@implementation TableVC
- (void)viewDidLoad
{
[self fetchKinos];
[self.tableView reloadData];
[super viewDidLoad];
}
-(void)fetchKinos {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.adworldmagazine.com/json.json"]];
NSError *error;
_kinos = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
});
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _kinos.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"KinoCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//[self configureCell:cell atIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSArray *entities = [_kinos objectForKey:@"entities"];
NSDictionary *kino = [entities objectAtIndex:indexPath.row];
NSDictionary *title = [kino objectForKey:@"title"];
NSString *original = [title objectForKey:@"original"];
NSString *ru = [title objectForKey:@"ru"];
cell.textLabel.text = original;
cell.detailTextLabel.text = ru;
return cell;
}
@end
答案 0 :(得分:0)
您的JSON响应字典包含一个entities
数组,其数量需要从表视图方法返回。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self.kinos objectForKey:@"entities"] count];
}
此外,当您声明strong
属性时,建议尝试以self.propertyName
访问它们,而不是像_propertyName
那样访问ivar。
希望有所帮助!
答案 1 :(得分:-1)
我在浏览器上访问了您的网址http://www.adworldmagazine.com/json.json 响应返回带有root:dictionary的JSON。
所以,
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _kinos.count;
}
不会工作。
请改用:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_kinos objectForKey:@"entities"].count;
}