我有一个带有以下代码的UITableView:
- (void)viewDidLoad {
[super viewDidLoad];
parser = [[XMLParser alloc] init];
[parser parseXML];
我的问题是启动时间太长,因为它在使用UITableView显示视图控制器之前解析了所有内容。此外,如果我设置另一个UITableView并解析另一个XML(在另一个选项卡中),我点击其他选项卡,但是当它解析其他XML时它会挂起,一旦完成,它就会显示UITableView。
我已经查找了有关何时开始解析,重新加载UITableView以及如何在解析代码运行时显示加载屏幕但无法提供任何内容的信息。
有人有什么想法吗?
答案 0 :(得分:3)
你可以打电话给
[parser performSelectorInBackground:@selector(parseXML) withObject:nil];
在主线程上在另一个线程中运行parseXML代码。小心不要从该线程更新ui。要从解析器线程更新UI,您需要调用类似
的内容[self performSelectorOnMainThread:@selector(XMLUpdated:) withObject:self waitUntilDone:NO];
答案 1 :(得分:1)
如果通过加载屏幕你的意思是一个活动指示器然后尝试在解析之前添加动画指示器可能无法工作,因为当你在主线程上解析时它会阻止并且不会让指示符出现在屏幕上。为了解决这个问题,我会在后台线程上进行解析,这应该允许你的指示符出现,当解析完成时,解析对象会向你的viewController发送一条消息,所以我知道它已准备好显示tableview。 (我应该提到UIKit不是线程安全的,你不应该尝试从后台线程更新任何UI元素而不使用performSelectorInMainThread)