UIViewController:一旦获取数据,视图就需要重新显示

时间:2014-11-16 23:38:03

标签: ios objective-c ios7 uiviewcontroller

我看起来像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];
}

但这不起作用,我的观点仍然是空白。我该怎么做才能解决这个问题?我错过了什么?

由于

1 个答案:

答案 0 :(得分:0)

如果您使用表格视图来显示数据(您的代码没有反映出来,请参阅我的评论),您只需致电

[self.tableView reloadData];