1

我在 iPhone 界面上有一个执行功能的按钮。功能是这样的:

-(IBAction)courses:(id)sender {
[loading startAnimating];
[connection getCourses];
[outlet setText:connection.lastResponseData];
}

我的问题是动画只在[outlet setText:connection.lastResponseData. 在此之前如何让加载开始动画?

谢谢。

4

2 回答 2

2

看起来像是getCourses阻塞了主线程;您开始的任何动画都将被删除,直到courses:返回之后。修改您的代码以使用后台线程:

-(IBAction)courses:(id)sender {
[loading startAnimating];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [connection getCourses];
        dispatch_async(dispatch_get_main_queue(), ^{
            [outlet setText:connection.lastResponseData];       
            [loading stopAnimating];
        });
    });
}

这会将您的阻塞网络访问置于系统提供的后台 GCD 队列中,该队列包含后台线程。

于 2012-05-27T03:19:53.513 回答
0

似乎您的连接阻塞了也负责 UI 的主线程。尝试在connection启动但未完成时与 UI 交互,如果它没有响应 - 使连接在另一个线程中运行。


例如,异步NSURLConnection不会阻塞你的 UI。

于 2012-05-27T03:10:18.940 回答