同时重新加载tableview

时间:2009-09-17 06:12:24

标签: iphone objective-c cocoa-touch xcode

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

2 个答案:

答案 0 :(得分:1)

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

如果是这样的话,我会:

  1. 将数据模型定义为属性。
  2. 在后台线程中更新临时数据模型。
  3. 更新后,我更新主线程上的数据模型属性。
  4. 重要的是更新真实模型属性,并请求在主线程上重新加载表视图的数据。否则会有一个时间段,表视图可以请求查看不再可用的数据模型项。

    实现将是这样的:

    -(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];
    }
    

答案 1 :(得分:0)

与什么同时?

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