ios - iOS如何等待直到 `didReceiveData`处理程序被调用

标签 ios multithreading

我正在开发从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/

相关文章:

ios - 如何完成图像到 Firebase 存储的上传,然后将 imageUrl 保存到 Firebase 数据库

ios - 更改 UIBarButton 标题显示新旧标题之间的省略号

java - netty中如何动态管理CPU负载?

c# - 如何在线程之间传递锁?

java - 线程池不调整大小

c++ - 使用 VS CTP 14 在 std::thread 析构函数上崩溃

java - 为什么垃圾收集器在回收内存之前停止所有线程

ios - 如何确保 WidgetKit View 显示来自 @FetchRequest 的正确结果?

ios - 带半径的中心坐标转换为 ne 和 sw 坐标

ios - 有没有办法从父 UIViewController 调用子 UIViewController 方法?