这就是我想做的: 从苹果的 RSS 获取包含应用程序信息的 xml,对其进行解析,然后在 UITable View 中显示应用程序。
问题是,在“reloadData()”之后,大约需要 5 秒才能显示信息。 此外,应用程序在打开项目后第一次运行时总是崩溃。
最佳答案
在表格中显示缓慢加载(即基于网络)数据的公认习惯用法是,如果数据尚未存在于表格中,则在单元格中显示事件指示器,然后在后台下载数据( NSOperationQueue 和 NSOperation 对此非常有用),并在数据准备好时发出通知。几乎可以肯定,这是您自己向表提供数据时的延迟(网络延迟和解析时间),而不是 UITabvleView 处理 reloadData 调用时的延迟。
编辑:更多信息,并解决延迟问题:
代码从主线程外部调用 UI 例程(“[table reloadData]”)。这很糟糕,不要这样做。
您试图将图像信息“推送”到 [self loadImages] 中的表中,而不是让表在 cellForRowAtIndexPath 中一次“拉取”一行信息。
编辑:好的,言归正传:我做了以下更改,所有延迟都消失了(根据 NSLog 时间戳,performSelectorOnMainThread 和 cellForRowAtIndexPath 之间大约有 2 毫秒)。
//[table reloadData];
NSLog( @"thread: calling reload" );
[table performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
//[self loadImages];
请注意,应用程序仍然不正确,图像尚未刷新。请记住:在后台下载图像,并向 View Controller 类发送新图像可用的通知,然后调用 [reload Table](当然是从主线程中运行的通知处理程序!)。不要从任何后台线程调用 UIKit 函数。这应该足以让您重组代码以做正确的事情。
关于iphone - TableView 在 "reloadData()"之后需要花费大量时间来刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056183/