2

我有一个带有以下代码的 UITableView:

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

我的问题是启动时间太长,因为它在使用 UITableView 显示视图控制器之前解析所有内容。此外,如果我设置另一个 UITableView 并解析另一个 XML(在不同的选项卡中),我点击转到另一个选项卡,但是它在解析另一个 XML 时挂起,一旦完成,它就会显示 UITableView。

我一直在寻找有关何时开始解析、重新加载 UITableView 以及如何在解析代码运行时显示加载屏幕的信息,但无法提出任何建议。

有人有想法么?

4

2 回答 2

3

你可以调用类似的东西

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

在您的主线程上以在不同的线程中运行 parseXML 代码。请注意不要从该线程更新用户界面。要从解析器线程更新 UI,您需要调用类似

[self performSelectorOnMainThread:@selector(XMLUpdated:) withObject:self waitUntilDone:NO];
于 2009-08-26T13:40:57.827 回答
1

如果加载屏幕是指活动指示器,那么尝试在解析之前添加动画指示器可能不起作用,因为当您在主线程上解析时,它会阻塞并且不会让指示器出现在屏幕上。为了解决这个问题,我将在后台线程上进行解析,这应该允许您的指示器出现,当解析完成时,解析对象会向您的 viewController 发送一条消息,以便它知道它已准备好显示 tableview。(我应该提到 UIKit 不是线程安全的,你不应该尝试在不使用 performSelectorInMainThread 的情况下从后台线程更新任何 UI 元素)

于 2009-08-21T13:18:11.863 回答