解析时的活动指标

时间:2012-08-21 22:07:07

标签: iphone ios cocoa-touch ios5 nsxmlparser

场景是:

有一个视图有一个按钮,可以将用户带到另一个视图。在下一个viewcontroller的viewDidLoad中,一个巨大的XML文件被下载,解析并显示在屏幕上。这样,当视图导航到屏幕时,我就会显示已经显示在屏幕上的数据。

问题是:

当我点击调用viewcontroller并在其中解析的按钮时,应用程序变得无法响应。一旦下载并解析了所有数据,应用程序就会移动到下一个视图。现在,我想在点击该按钮时显示一个活动指示器,直到应用程序无响应为止。一旦视图导航到另一个视图,活动指示器应该停止。我尝试将活动指示器放在我想要降落的ViewController的viewDidLoad中,但无济于事。

PS:由于应用程序的性质,我无法在“viewWillAppear”中进行解析。

期待回复。

4 个答案:

答案 0 :(得分:3)

您应该在后台队列/线程中执行任何不涉及UI的主要工作。

使用GCD,可能看起来像这样:

// Start UIActivityIndicator

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // Parse your XML

    dispatch_async(dispatch_get_main_queue(), ^{

        // Update the UI when you're finished

    }
}

答案 1 :(得分:1)

你应该真的在另一个线程上进行解析。这样主线程(也是UI线程)可以继续。看看performSelectorInBackground

您的指标未显示,因为解析可能发生在viewDidLoad之前。您可以先添加指示符,然后按下新的视图控制器,然后删除指示符。

但实际上,这是非常糟糕的UI和UX设计,你应该使用线程。

答案 2 :(得分:1)

您希望在后台下载该文件。如果您为此使用NSOperations,则可以让该操作也解析XML文件。

这为您提供了两种显示进度的方法(优于仅仅是一个微调器)。允许下载50%,解析50%。获得urlConnection委托响应后,您可以了解下载的大小,然后在数据进入时更新进度。当你开始解析时,你可以在解析器:didEndElement中放入一些代码来询问解析器它的行是什么,如果你知道行的总数,你就知道它的进展。

答案 3 :(得分:0)

你可以使用MBProgressHUD这里的链接。

https://github.com/jdg/MBProgressHUD

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_uiactivityindicatorview_mbprogresshud/

你必须在viewcontroller viewdidload方法中使用它。