【问题标题】:UITableView Not Being Updated iOSUITableView 未更新 iOS
【发布时间】:2013-06-22 18:29:02
【问题描述】:

我正在在线下载一个包含文件内容的字符串,并将这些组件按字符串分隔成一个数组。

下载完成后,我将调用一个方法来更新我的 tableview 以显示这些值。

- (void)updateTableView {
    tableView.delegate = self;
    tableView.dataSource = self;
}

基本上在这个方法中我设置了委托和数据源,所以表格视图使用这个方法得到更新......

- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [[UITableViewCell alloc] init];
    cell.textLabel.text = [arrayDownloaded objectAtIndex:indexPath.row];
    return cell;
}

但问题是表格视图在我“触摸”视图之前不会更新。

就像所有数据都已加载并且方法已被调用,但直到我点击屏幕上的任何位置时,表格视图才会更新?

为什么会这样?如何在设置委托和数据源后立即更新?

-亨利

【问题讨论】:

  • 在您的updateTableView 中添加[tableView reloadData];
  • 这不是正常行为,因此您需要发布更多代码,以便我们能够发现您的问题。
  • @TimothyMoose 谢谢回复,你需要什么代码?
  • 你的视图控制器。如果那里没有明显的问题,我认为最好的办法是亲自动手并进行一些调试。
  • @TimothyMoose 我该如何调试这个...?你有什么建议吗?

标签: ios objective-c uitableview delegates datasource


【解决方案1】:

如果您尚未在某处执行此操作,则需要在应用更改后致电 [tableView reloadData]

【讨论】:

    【解决方案2】:

    下载完成后重新加载tabledata即可。

    - (void)updateTableView 
    {
        tableView.delegate = self;
        tableView.dataSource = self;
        [tableView reloadData];
    }
    

    【讨论】:

    • 在我与表格视图交互之前仍然不会重新加载。
    【解决方案3】:

    我想出了解决办法。而不是调用[self updateTableView];调用下面的方法...

    - (void)updateTableView {
        [tableView reloadData];
    }
    

    我需要做[self performSelectorOnMainThread:@selector(updateTableView) withObject:nil waitUntilDoneNO];

    有些人称这是一个 iOS 错误,因为如果你不在主线程上,numberOfRowsInSection 会被调用,但 cellForRowAtIndexPath 不会。

    我在我的应用中看到了一件奇怪的事情。希望这对未来的开发者有所帮助。

    -亨利

    【讨论】:

    • UIKit 代码必须始终在主线程上运行。不这样做可能会导致未定义的行为。所以我不知道怎么会有人将这种奇怪的行为称为 iOS 错误。不过很高兴你想通了。
    • 你也可以[tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDoneNO]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多