服务器返回查询后更新UITableView

时间:2013-12-26 20:52:19

标签: ios objective-c uitableview

我有一个带回调块的服务器查询。

- (NSArray *)products{
    if(! _products) {
        [self.query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
            if(! error) {
                _products = objects;
                [self.tableView setNeedsDisplay];
                [self.tableView reloadData];
            }
        }];
    }
    return _products;
}

在同一个UITableViewController.m中,我实现了以下方法:

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

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {}

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


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{}

所有这些方法都在某处使用self.products。 我希望表更新并在查询从服务器返回后显示。在此之前,我想要一个活动指示器视图,向用户显示数据仍在从服务器下载。 我试过[self.tableView reloadData]和[self.setNeedsDisplay]。但是现在我的桌子还是空的。 我在这里做错了什么以及如何更改代码?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您正在使用像

这样的后台更新代码重新加载它
(NSArray *)products{
    if(! _products) {
        [self.query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
            if(! error) {
                _products = objects;
               //reload on main tread
 dispatch_async(dispatch_get_main_queue(), ^{
                [self.tableView reloadData]; });
            }
        }];
    }
    return _products;
}