我看起来像TransactionViewController
@interface TransactionViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
@property(nonatomic, weak) IBOutlet UILabel *yearHeaderLabel;
@property(nonatomic, weak) IBOutlet UILabel *monthHeaderLabel;
@property(nonatomic, weak) IBOutlet UILabel *transactionsCountHeaderLabel;
@end
在实现中,代码看起来像
@interface TransactionViewController ()
@property(nonatomic, strong) TransactionsModel *transactionsModel;
@end
@implementation TransactionViewController
- (id)init {
self = [super init];
if (self) {
[TransactionsAPI getTransactionsForYear:2014 AndMonth:9 completionHandler:^(NSDictionary *transactions) {
self.transactionsModel = [[TransactionsModel alloc] initWithJson:transactions];
NSLog(@"transactionsModelInViewController:%@", self.transactionsModel);
[self viewWillAppear:YES];
}];
}
return self;
}
从API
服务器加载数据需要时间,其他方法不等待,因为调用是异步的,它们看起来像
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.transactionsModel.transactions.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView registerNib:[UINib nibWithNibName:@"TransactionCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
TransactionCell *transactionCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (transactionCell == nil) {
transactionCell = [[TransactionCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
TransactionModel *transactionModel = self.transactionsModel.transactions[(NSUInteger) indexPath.row];
[self setTransactionCell:transactionCell transactionModel:transactionModel];
return transactionCell;
}
现在,因为self.transactionsModel
首先是nil
,所以没有显示任何内容,但最终数据存在,所以我需要刷新视图。所以我试试
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.view setNeedsDisplay];
}
但这不起作用,我的观点仍然是空白。我该怎么做才能解决这个问题?我错过了什么?
由于
答案 0 :(得分:0)
如果您使用表格视图来显示数据(您的代码没有反映出来,请参阅我的评论),您只需致电
[self.tableView reloadData];