按下按钮时,我需要登录。当调用sendSynchronousRequest时,我想要一个“加载”指示符。我知道在我发出URL请求之前添加加载屏幕是行不通的,因为直到URL请求返回结果后才显示代码。我尝试了几件事:
我想得到两个答案:1)什么是快速和脏(但功能,使用iOS 3.2+)的方式来做到这一点? 2)什么是正确的方法呢? :)
由于
答案 0 :(得分:1)
快速而肮脏的方式:
- (void)startLogin:(id)sender {
NSURLRequest *request = ...;
[activityIndicator startAnimating]; // or whatever you need to get your loading screen to show
[self performSelector:@selector(startRequest:) withObject:request afterDelay:0.0];
}
- (void)startRequest:(NSURLRequest *)request {
//Do your actual request here...
}
好一点:在后台线程上做请求(忘记在后台线程上做动画,UIKit不是线程安全的)
好多了:使用主线程中NSURLConnection
的异步方法。这样,您不会阻止(如果您愿意,可以使用“屏蔽”视图阻止UI),如果需要很长时间(您永远不知道您的用户属于哪种类型的网络),您可以取消请求不必担心线程安全。
答案 1 :(得分:0)
如果你想同步这样做,你需要在主线程之外的另一个线程中执行它,如果你想在UI同时发生某些事情的话。请求完成后,您需要调用主线程来删除加载指示器,因为UI操作只允许在主线程中。
1)由于您已经创建了创建线程等的代码,因此最快的方法是在新方法中添加请求之后的内容并使用performSelectorOnMainThread:withObject:waitUntilDone:
2)您可以使用异步请求。但我不会说这是一种更恰当的方式。但是在这种情况下你不需要乱用线程。在iOS4 +中,您可以使用Grand Central Dispatch,dispatch_async
等,这比手动创建线程更容易。