委托方法中的返回值,但完成处理

时间:2015-07-22 11:51:31

标签: multithreading return return-value objective-c-blocks completionhandler

我有一个带有视图控制器的地图作为它的委托,我调用下面的方法将一些自定义引脚添加到地图中,并获取到它们的路径。

我想添加路径到引脚的距离,所以我需要计算路线,然后在返回引脚之前将距离添加到自定义引脚。

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
     //setup custom pin view and directions request

    [directions calculateDirectionsWithCompletionHandler:
    ^(MKDirectionsResponse *response, NSError *error) {
         if (error) 
         {
              // error
         } else {
             // no error
         }
     }];

     // add distance to custom pin view
     // ONLY once directions calculated
     return custom pin view;
}

我会如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您需要在不等待的情况下返回视图,然后在完成处理程序中更新它。可以使用NSCondition(以及可能的其他方式)同步异步调用,但是当主线程用于完成时,这是危险的。