尽管有线程,UIActivityIndi​​catorView仍未显示

时间:2011-02-22 04:51:03

标签: iphone objective-c ios uiactivityindicatorview

我一直试图实施这个问题很长时间没有取得好成绩。

假设我有一个执行HTTP请求的方法(特别是推特更新),并说我想在HTTP请求正在进行时显示UIActivityIndicatorView(我知道什么时候完成因为在请求完成时会调用委托方法,无论是正结果还是负结果。)

我看过很多答案,说线程是实现这个类所必需的。起初我尝试在另一个线程和startAnimating方法中直接调用stopAnimating方法(不启动新线程)。在那之后我看到了this guy是如何做到的,我认为这更安全,因为我开始并以两种不同的方法停止指标(twitter更新的委托方法)。

但是,这两种方法都没有给我我想要的结果(活动指标根本没有显示)。有什么我想念的吗?

提前感谢您,如果我的问题太长,我会道歉 非常感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

使用UIKit子类时绝对禁止线程化。您可能已经看到UIActivityIndi​​catorView在内部使用线程的报告,但这绝不意味着您可以从多个线程访问该对象。必须只能从主线程访问所有UIView子类(包括UIActivityIndi​​catorView)。这包括致电-startAnimating-stopAnimating

如果你重写代码使得你只是访问主线程上的活动视图,但它仍然无法正常工作,那么我猜测该视图未被添加到可见视图中,被覆盖通过另一个视图,或者有一个框架将自己置于超视图的可见区域之外。

答案 1 :(得分:0)

您无法在辅助线程中执行UI内容。

您应该在辅助线程中执行HTTP请求,同时从主线程调用活动视图。

我建议使用DSActivityView,这样更容易使用。只有1行显示活动视图,1行隐藏。

答案 2 :(得分:0)

MBProgressHUD它也很简单,当辅助线程启动/完成时显示和隐藏自己。像这样:

[HUD showhileexecuting:"yourstuff" animated:YES]

“Yourstuff”将在一个单独的线程上运行。

您不应在辅助线程中执行UI活动。