【问题标题】:reload uitableview simultaniously同时重新加载表格视图
【发布时间】:2009-09-17 06:12:23
【问题描述】:

我必须使用线程同时重新加载 uitableview。我已经在使用两个线程从网络加载数据。是否可以使用线程重新加载 tableview?还有其他方法吗?

【问题讨论】:

    标签: iphone objective-c cocoa-touch xcode


    【解决方案1】:

    与什么同时?重新加载需要时间,您需要在后台重新加载支持数据模型,同时仍然显示能够向用户显示数据?

    如果是这样,那我会:

    1. 将数据模型定义为属性。
    2. 在后台线程中更新临时数据模型。
    3. 更新后,我会更新主线程上的数据模型属性。

    在主线程上更新真实模型属性,并请求重新加载表视图的数据是很重要的。否则会有一个时隙,表视图可以请求查看不再可用的数据模型项。

    实现是这样的:

    -(void)releadData;
    {
      [self performSelectorInBackground:@selector(reloadDataInBackground)
                             withObject:nil];
    }
    
    -(void)reloadDataInBackground;
    {
      NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
      MyDataModel* model = nil;
      // Do what is needed to setup model.
      [self performSelectorOnMainThread:@selector(updateModelOnMainThread:)
                             withObject:model
                          waitUntilDone:NO];
      [pool release];
    }
    
    -(void) updateModelOnMainThread:(MyDataModel*)model;
    {
      self.model = model;
      [self.tableView reloadData];
    }
    

    【讨论】:

      【解决方案2】:

      同时与什么?

      UIKit 的所有操作都必须在主线程上完成,因此您可以使用后台线程与 Internet 通信或进行自己的处理,但与 UITableView 的任何实际交互都必须在主线程上进行。

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 2018-04-12
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多