0

我创建了一个接收坐标的对象,并假设在对其进行反向地理编码后返回一个地标。问题是这个方法是异步的,所以我需要一种方法来在找到地标后返回它。在我的视图控制器中,我称之为:

[getzip reverseGeocodeCurrentLocation:coordinate];

其中 getzip 是实现这个的对象的一个​​实例(在我的情况下它仍然是空的......):

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark

现在,一旦我进入 reverseGeocoder:didFindPlacemark,如何将地标返回给视图控制器?

我尝试做与我在使用 LocationManager 完成的一些示例中看到的相同的事情,其中​​从 locationManager:didUpdateToLocation:fromLocation 调用 locationUpdate 方法,并在视图控制器中实现 locationUpdate,但它不起作用。换句话说,我是这样做的:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
[self.delegate setPlacemark:placemark];
}

并在viewcontroller中实现了setPlacemark,但由于某种原因它没有到达setPlacemark(顺便说一句,一旦我在reverseGeocoder中调用setPlacemark:placemark,地标就是正确的)。

谢谢!

4

1 回答 1

1

根据您的评论,self.delegate是在nil何时执行。因此,什么也没有发生。[self.delegate setPlacemark:placemark];reverseGeocoder:didFindPlacemark:

在调用之前,您必须将delegate属性设置为您的视图控制器。reverseGeocoder:didFindPlacemark:如果您的视图控制器中的变量getzip是实现reverseGeocoder:didFindPlacemark:GetZipCode?)的类的实例,您将在您的视图控制器中执行此操作:

getzip.delegate = self;

正如我在评论中所说,通过使您的视图控制器符合GetZipcodeDelegate协议意味着您的视图控制器可以成为委托,因为它响应委托的对象可能发送给其委托的消息。这并不意味着它代表。

于 2011-07-12T17:03:03.300 回答