0

目前我有一个由服务器查询更新的表,所以它不是即时的。viewDidLoad目前我在委托方法中填充数组,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    followers = [[User sharedManager] loadFollowers];    
}

但是,发生的情况是我按下按钮以模态转换到 tableview,然后等待查询成功,然后才拉起视图。显然这真的很烦人,因为它感觉像是崩溃/滞后。我宁愿它立即拉起页面并在查询执行时具有“正在加载...”或活动视图。我怎样才能做到这一点?

4

2 回答 2

1

从以下开始(它看起来不会滞后或崩溃):

[self performSelectorInBackground:@selector(load_followers)];

-(void)load_followers
{
    followers = [[User sharedManager] loadFollowers]; 
}

您总是必须在后台线程中进行此类查询。您不希望界面冻结并阻止用户与应用程序交互。

于 2013-11-04T21:22:28.153 回答
0

如果你做了很多网络工作,你应该看看像这样的类NSURLConnection或库AFNetworking,使网络变得微不足道。

您需要确保网络的东西不在主(UI)线程上运行。你可以像这样用 gcd 做到这一点

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  self.followers = [[User sharedManager] loadFollowers];
  dispatch_async(dispatch_get_main_queue(), ^{
    // update the UI now new data has been stored
    // e.g. [self reloadData];
  });
});
于 2013-11-04T21:32:10.367 回答