首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Load服务之前加载UITableViewController

在Load服务之前加载UITableViewController
EN

Stack Overflow用户
提问于 2013-07-22 17:17:48
回答 4查看 104关注 0票数 2

我正在尝试从web-services加载数据并插入到UITableViewController中。

我可以成功地做到这一点,但问题是,当它从互联网加载web-services时,它会在第一个UIView上挂起一小段时间,然后转到UITableViewController。如果网速慢,它的hang会更长。

我是否可以先显示带有“正在加载”标志的空UITableViewController,然后只开始从web-services中检索数据并重新加载该表?

目前,我将用于调用web-services的函数放在

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    self._completeList = [[NSMutableArray alloc]init];
    self._completeList = [self getListFromWebServices];
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-22 17:26:29

最佳方法作为我的建议,您必须使用Grand Central Dispatch (GCD),如bellow作为示例

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

       //code for webservices calling

        dispatch_async(dispatch_get_main_queue(), ^{

           //reload you tableview here
           [self.tableview reloadData];
        });
    });
票数 5
EN

Stack Overflow用户

发布于 2013-07-22 17:22:36

您将使用array.count将数据存储在数组和numberOfRows方法中。

你应该在viewDidLoad中分配初始化数组,并启动辅助线程从net下载数据。

代码语言:javascript
复制
 [self performSelectorInBackground:@selector(getListFromWebServices) withObject:nil];

下载完成后,调用主线程上的表reloadData。

代码语言:javascript
复制
[self.table performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

因此,在下载dataArray之前,计数将为零,您将得到空白表

票数 0
EN

Stack Overflow用户

发布于 2013-07-22 17:23:36

最简单的解决方案是将这两行代码移到-(无效)viewDidAppear中:

代码语言:javascript
复制
- (void)viewDidLoad {
  [super viewDidLoad];
  self._completeList = [[NSMutableArray alloc]init];
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated]; 
  self._completeList = [self getListFromWebServices];
  // Assuming that [self getListFromWebServices] is a blocking call.
  [self.tableView reloadData];
}

但我建议您使用GCD异步加载数据:

代码语言:javascript
复制
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) { 
      _completeList = [[NSMutableArray alloc] init];
      dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        self._completeList = [self getListFromWebServices];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
      });
    }
    return self;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17783776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档