【问题标题】:Refresh/Reload UITableView on every callback在每个回调上刷新/重新加载 UITableView
【发布时间】:2012-02-07 11:23:18
【问题描述】:

在我的 iOS5 应用程序中,我有 UITableView,它会根据存储在 progressLabelArray 中的 NSString 值显示单元格。我已经从我的较低层注册了一个回调,并在一个 C 函数中接收到它们,我通过对 self 的引用设法调用 UI 更新方法。

    static void callback_handler(int nCode) {
        [refToSelf updateProgressView:nCode];
    }


    -(void) updateProgressView:(int32_t) nCode
    {
        NSString *status = nil;
        status = [self progressUpdateToString:nCode];
        [self.progressLabelArray    insertObject:status atIndex:0];
        [self.progressTableView reloadData];
        [self.progressTableView setNeedsDisplay];
    }

我猜,由于回调来自同一个(UI 线程),因此可能不需要 performSelectorOnMainThread。

我的问题是表视图只有在整个操作完成后才会刷新,显示最后一个回调值。有没有一种方法可以在每次回调后强制 UI 刷新?回调可能会比较快。

【问题讨论】:

  • 如果回调来得太快,那么您将如何观察数据的变化,即为什么只有最后一个变化是可见的
  • 首先它们不会太快而不会被忽视,然后当我在各种回调后调试并中断时,我只会在视图上看到初始值。
  • 仍然无法解决问题。请我亲爱的 iOS 朋友 - 帮助!!!
  • 将您的代码发送至 rathore619@gmail.com。
  • 那太好了...然后添加你的答案并接受它

标签: iphone objective-c uitableview ios5


【解决方案1】:

通过在单独的线程中运行进度代码解决了该问题。回调来自一个单独的线程,在那里我更新了我的主线程(UI 线程)。我猜 UI 线程没有得到任何周期来更新 UI。

【讨论】:

    【解决方案2】:

    把你的

    tableView.reloadData()

    在以下块中调用,您的表格视图将毫无问题地刷新,并且不会像在实时应用程序中那样刷新滚动条。

    对于 Swift 3:

    DispatchQueue.main.async()
    {
        tableView.reloadData()
    }
    

    对于目标 C:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // Background work
        [tableView reloadData];
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2011-03-29
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2011-08-26
      相关资源
      最近更新 更多