[objective-c]MKReverseGeocoder 提供地址等

发布时间: 2017/3/27 3:08:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

有没有办法等待地理编码器调用 didFailWithError 或 didFindPlaceMark?

我的问题是我要调用接收坐标并返回标举行地址的方法。但当我调用 [myGeocoder 启动] 代码继续,我把空的标。

我的代码是︰

- (MKPlasemark*) getAddress:(CLLocationCoordinate2D) coordinate
{
    [self startGeocoder:coordinate];
    return self.foundPlasemark;
}

- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFindPlacemark:(MKPlaseMark*)plasemark
{    
    self.foundPlasemark=plasemark;    
}

- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFailWithError:(NSError*)error
{    
    self.foundPlasemark=nil;    
}

我试图执行 sleep () whyle 调用以下方法之一,但它不工作。

解决方法 1:

我认为你走错了路,就没有理由阻止,你所要做是有该方法返回 void,和在类中,处理地理编码,定义一种Protocol,说 — — 有一种方法 (void) didReceivePlacemark: (id) 标标可以是零或一些标,和它被称为地理编码器返回时。为您的类,也使委托财产,所以任何人都可以订阅议定书 》......然后在调用类订阅议定书 》 和实施该方法...这里是有点更多Protocol

希望有帮助在这里是一个例子︰ 所以你确实地理编码的类的接口将看起来像这样

@protocol GeocoderControllerDelegate
  -(void)didFindGeoTag:(id)sender; // this is the call back method 


@end

@interface GeocoderController : NSObject {

    id delegate;
}
@property(assign) id <GeocoderControllerDelegate> delegate; 

在执行中,你会看到这样的事情

- (void) getAddress:(CLLocationCoordinate2D) coordinate
{
    [self startGeocoder:coordinate];
}

- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFindPlacemark:(MKPlaseMark*)plasemark
{    
   [delegate didFindGeoTag:plasemark]; 
}

- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFailWithError:(NSError*)error
{    
   [delegate didFindGeoTag:nil]  
}

在调用类中,都必须设置是委托财产的 GeocoderClass 和实施议定书 》,实施可能看起来

-(void)findMethod
{

  GeocoderController *c=...
  [c setDelegate:self];
  [c findAddress];
  //at this point u stop doing anything and just wait for the call back to occur
  //this is much preferable than blocking
}

 -(void)didFindGeoTag:(id)sender
{
    if(sender)
    { 
       //do something with placemark
    }
    else 
    {
     //geocoding failed
    }
}
赞助商