2011-07-12 37 views
0

我创建了一个接收坐标的对象,并假设在对其进行反向地理编码之后返回地标。问题是这种方法是同步的,所以我需要一种方法,一旦找到它就返回地标。在我的视图控制器我称之为:如何从目标c中的实例化对象返回值?

[getzip reverseGeocodeCurrentLocation:coordinate]; 

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

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

现在,一旦我进入reverseGeocoder:didFindPlacemark,我怎样才能将地标返回给viewcontroller?

我试图做同样的事情,正如我在一些使用LocationManager执行的例子中看到的,其中locationUpdate方法是从locationManager调用的:didUpdateToLocation:fromLocation,并在viewcontroller中实现locationUpdate,但它不起作用。换句话说,我这样做:

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

,并在视图控制器实现setPlacemark,但它不从某些原因(顺便说一句,地标是正确的,一旦我打电话setPlacemark:地标之内reverseGeocoder)得到setPlacemark。

谢谢!

+0

你确定'self.delegate'不是'nil'吗? –

+0

“'[self.delegate setPlacemark:placemark];'并在视图控制器中实现了'setPlacemark',但它没有从某种原因到达'setPlacemark'”您是否将视图控制器设置为委托? – albertamg

+0

如何将视图控制器设置为委托?对不起,新的目标c ... – TommyG

回答

1

根据您的意见,self.delegatenil[self.delegate setPlacemark:placemark];reverseGeocoder:didFindPlacemark:执行。因此,没有任何反应。

在调用reverseGeocoder:didFindPlacemark:之前,必须将delegate属性设置为您的视图控制器。如果您的视图控制器变量getzip是实现reverseGeocoder:didFindPlacemark:的类的实例,你会在你的视图控制器做到这一点(GetZipCode):

getzip.delegate = self; 

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

+0

哦,我的主啊,非常感谢你!我永远不会猜到这一点。我想我错过了目标C的基本原理,因为我没有真正完全掌握整个代理业务。再次感谢,这是它! – TommyG

+0

不客气:)看看这些文档[1](http://developer.apple.com/library/ios/#DOCUMENTATION/General/Conceptual/DevPedia-CocoaCore/Delegation.html)[2](http ://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18)。他们很好地解释了委托模式。 – albertamg

+0

这真的很棒......谢谢! – TommyG