我有一个相当讨厌的问题。我有一个带有博客条目的表格视图(从RSS源收集)。加载视图时,我通过-addSubview:
将加载屏幕应用于blogViews视图。在-viewDidAppear:
中,我开始加载数据。这适用于iOS 5模拟器以及带有iOS 5.0.1的iPhone 4。
但是当我在4.3模拟器上执行此操作时,加载屏幕不会出现。屏幕被锁定在上一个屏幕(另一个tableView)上,直到加载完成。
问题是,当然,在视图出现之前不应该开始加载。举例说明:当我单击标签栏按钮打开博客时,加载开始(在-vievDidAppear:
中),当加载完成时,屏幕出现 - 它应该是相反的方式!这很奇怪,为什么它会像4.3那样做而不是5?
我应该在第一个表中使用-viewWillUnload
方法查看并应用加载屏幕吗?这意味着当我不需要加载屏幕时卸载它时,总会有一个加载屏幕(闪烁一秒)。
(通过加载屏幕,我的意思是用图像启动UIImageView
,在顶部有一个activityIndicator)
感谢您的任何意见!
答案 0 :(得分:0)
Mark指出,你的问题与执行长操作时阻塞主线程有关,实际上应该在后台执行。 如果这样做,调用viewDidAppear:时无关紧要,因为在执行加载时你不会阻塞主线程。
您可以解决此问题,在后台执行加载操作,然后返回主线程以删除加载指示符。您可以使用GCD轻松完成:
- (void)viewDidAppear:(BOOL)animated
{
// ...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
// Perform your time consuming operation, eg. load your blog entry
dispatch_async(dispatch_get_main_queue(), ^{
// remove the loading screen and set your blog's data to UI components
});
});
}