我正在开发从Web服务器获取数据的ios应用程序。我希望其他所有内容都等待,直到该类的处理程序之一被调用并完成。我知道可以通过使用调度/线程,但是我只是不知道如何。
-(void)callWebService:(NSString*)URL:(NSString*)SOAP{
NSURL *url = [NSURL URLWithString:URL];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[SOAP dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if(con){
[con start];
}
}
在此方法的末尾继续该类之外的代码。但我想等到这个处理程序被调用(并完成):
-(void)connection:(NSURLConnection *)c didReceiveData:(NSData *)data{
NSString *res = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",res);
Ukol_Parser *parser = [Ukol_Parser alloc];
[parser parseUkol:res];
}
因为这里的解析器将数据放入sqlite db,并且正在读取此类之外的数据。但是“外部”代码的执行速度比我得到响应和调用处理程序的速度快。
最佳答案
如果您想“其他所有东西都在等待”,那么听起来您真正想做的就是同步请求。
查看[NSURLConnection sendSynchronousRequest:returningResponse:error:]
但是,请确保在后台线程上执行此操作,因为如果在主线程上执行此操作,则UI将会阻塞,并且您的应用程序将对用户的触摸或其他任何内容均无响应。
关于ios - iOS如何等待直到 `didReceiveData`处理程序被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324821/