iOS:在填充tableview之前等待异步方法

时间:2014-03-11 17:37:16

标签: ios objective-c uitableview asynchronous

我从我的服务器获取一些数据,我需要将其用作创建表格视图的元数据。问题是数据与应用程序流异步加载。我确定这可能是一个简单的修复,但是我怎么能暂停应用程序的流程直到从服务器加载数据,或者在数据可用时更新表格视图?

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用UIActivityIndi​​catorView显示正在下载的数据。在异步模式下下载数据后,您可以重新加载UITableView。

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] 
                                       initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    spinner.center = CGPointMake(100, 100);
    spinner.hidesWhenStopped = YES;
    [self.view addSubview:spinner];
    [spinner startAnimating];

现在调用从网络下载数据的方法。

[self asyncDownloadMethod];

当您收到通知时,即任何代表已下载内容时,请停止指示。

[spinner stopAnimating];

希望这有帮助。

答案 1 :(得分:1)

首先,确保正确编写数据源方法,以便在没有数据的情况下,表格确实为空。这是因为数据源方法将在表首次出现时调用,即在您拥有数据之前。

然后,当数据时,只需调用reloadData(在主线程上!)。相同的数据源方法将再次运行 ,但这次有数据。

答案 2 :(得分:0)

您还没有提供足够的信息来明确回答,但其中的要点是您需要设置delegate,以便在您完成加载数据后处理填充表格视图

例如,NSURLConnection类定义用于异步加载数据的connectionWithRequest:delegate:选择器。 delegate参数定义为:

  

<强>委托   连接的委托对象。当负载进行时,连接调用此委托上的方法。委托方法在调用此方法的同一线程上调用。为了使连接正常工作,调用线程的运行循环必须在默认的运行循环模式下运行。