TableView reloadData没有重装?

时间:2014-10-03 10:30:38

标签: ios objective-c xcode uitableview reloaddata

首先,我使用initWithCoder初始化表,然后在单元格中加载数据。当数据源发生变化(这是Web服务)时,我希望表重新加载。只是为了测试我连接了按钮动作并添加了[self.tableView reloadData]

但表格没有重新加载,但数据源已更改。如果我转到不同的视图并返回到表视图,则会显示新数据。有什么建议吗?

- (id)initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder];
    if (self) {
        self.titleList = [[SearchModel alloc] init];
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
        [self.titleList load: ^(id json) {
            [self.tableView reloadData];
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        }];
    }
    return self;
}


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

    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    static NSString *CellIdentifier = @"title";
    TitleDetailCell *cell = nil;
    Model *title = nil;

     title = [self.titleList get:indexPath.row];

    if (cell == NULL)

    {
        cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


        [cell movieTitleLabel].text = [title get:@"title"];
        [[cell movieImageView] setImageWithURL: thumbnail];
    }
    return cell;
}

2 个答案:

答案 0 :(得分:0)

在调用initWithCoder:时,尚未创建tableView

将代码从initWithCoder:移到viewDidAppeare:,在主线程上重新加载数据,它应该有所帮助:

self.titleList = [[SearchModel alloc] init];
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
        [self.titleList load: ^(id json) {
            // Log data to see is data is ready
             NSLog(@"%@",[title get:@"title"]);
            // Reload table on the main thread
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.tableView reloadData];
                [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
            });
        }];

答案 1 :(得分:0)

两件事:

  1. 您不会对回调中的数据(json)执行任何操作。您是否需要将其存储在任何位置,以便在表格视图中显示?
  2. 回调是在主线程还是后台线程上发生的?如果你正在做UI的事情,你需要确保它在主线程上