【问题标题】:Show loading screen while parsing, then refresh UITableView?解析时显示加载屏幕,然后刷新 UITableView?
【发布时间】:2010-11-21 15:29:54
【问题描述】:

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

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

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

我已经查找了有关何时开始解析、重新加载 UITableView 以及如何在解析代码运行时显示加载屏幕的信息,但未能提出任何建议。

有人有什么想法吗?

【问题讨论】:

    标签: iphone uitableview nsxmlparser


    【解决方案1】:

    你可以这样称呼

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

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

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

    【讨论】:

    • 如果 parseXML 在另一个类中定义怎么办?怎么称呼它?
    【解决方案2】:

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

    【讨论】:

    • 我已经在状态栏中有一个活动指示器,但在解析发生时,应用程序仍然出现“挂起”一段时间。我想在加载时显示一个视图,上面写着“正在加载”或其他内容,然后消失,或者可能只是显示一个空白的 UITableView,直到解析完成。解析完成后,UITableView 会刷新..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多