2009-08-21 98 views
2

我有下面的代码一个UITableView:解析时显示加载屏幕,然后刷新UITableView?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    parser = [[XMLParser alloc] init]; 
    [parser parseXML]; 

我的问题是,此次推出的时间太长,因为它显示与UITableView的视图控制器之前分析的一切。另外,如果我设置了另一个UITableView并解析另一个XML(在另一个选项卡中),我可以点击其他选项卡,但在解析其他XML时挂起,一旦完成,它将显示UITableView。

我已经查找了何时开始解析,重新加载UITableView以及如何在解析代码运行时显示加载屏幕,但一直没有能够拿出任何东西的信息。

任何人有任何想法?

回答

3

您可以拨打像

[parser performSelectorInBackground:@selector(parseXML) withObject:nil]; 

在你的主线程运行parseXML代码在不同的线程中。只要注意不要从该线程更新ui。要更新从解析器线程的UI,你需要调用类似

[self performSelectorOnMainThread:@selector(XMLUpdated:) withObject:self waitUntilDone:NO]; 
+0

如果parseXML在另一个类中定义,该怎么办?如何调用它? – Maulik 2011-04-29 08:50:33

1

如果通过加载屏幕您的意思是一个活动指标,然后尝试添加解析之前动画的指标可能无法正常工作,因为当你解析主线程时,它会阻止并且不让指标出现在屏幕上。为了解决这个问题,我会在后台线程上进行解析,这应该允许你的指标出现,当解析完成时,解析对象向你的viewController发送消息,所以我知道它准备好显示tableview。 (我要指出的UIKit不是线程安全的,你不应该尝试更新从后台线程任何UI元素,而无需使用performSelectorInMainThread)

+0

我已经在状态栏中选择一个活动指标,但应用仍显示为“挂”了一段时间,而解析发生。我想在加载时显示一个视图,其中显示“正在加载”或其他内容,然后淡出,或者直到解析完成才显示空白的UITableView。一旦解析完成,UITableView刷新.. – runmad 2009-08-21 14:00:19

+0

因此,建立一个视图,并在解析之前添加子视图... – Daniel 2009-08-21 14:28:47