如何执行对象的内部函数

时间:2011-07-11 21:16:45

标签: iphone objective-c oop class ios4

所以我是面向对象编程的新手,我正在尝试在xcode中执行以下操作 - 我有一个MyMap.m视图控制器,我在其中显示您的位置,现在想要添加天气。为此,我想将坐标发送到将首先返回邮政编码的地理编码器类。我决定用类加热它,所以创建了一个将返回zipcode的类。

地图控制器中的代码是:

.....

  MKPlacemark *zip;
    getzip = [[GetZipcode alloc] init]; //ADDED THIS

[getzip reverseGeocodeCurrentLocation];
zip = getzip.myPlacemark;
NSLog(@"Placemark is: %@", zip);

...

其中getzip是GetZipcode类的实例:

@interface MyMap : UIViewController <MKMapViewDelegate, MyLocationControllerDelegate> {

              GetZipcode *getzip;
 //and more stuff
 }

出于某种原因,我在运行时没有发生任何事情:

[getzip reverseGeocodeCurrentLocation];

reverseGeocodeCurrentLocation是GetZipcode类中的一个函数:

·H

- (void)reverseGeocodeCurrentLocation;

并且该类的.m是:

- (void)reverseGeocodeCurrentLocation
{
self.reverseGeocoder = [[[MKReverseGeocoder alloc] init] autorelease];
reverseGeocoder.delegate = self;
[reverseGeocoder start];
}



- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
PlacemarkViewController *placemarkViewController = [[PlacemarkViewController alloc] initWithNibName:@"PlacemarkViewController" bundle:nil];
placemarkViewController.placemark = placemark;
myPlacemark = placemark;
NSLog(@"Placemark is: %@", placemark.postalCode);
 }

希望这不是TMI,但我真的很感激这里的一些帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

你没有给MKReverseGeocoder一个坐标来反转地理编码。

指定的初始化程序是 - [MKReverseGeocoder initWithCoordinate:],您可以通过它提供坐标。

希望有所帮助

(当然也要检查你是否创建并初始化了你的GetZipcode实例,当你尝试使用它时,getzip不是nil。)

修改

您创建了一个名为getzip的实例变量(ivar)。但是你没有发布任何创建GetZipcode实例的代码并将该地址放在指针getzip中。在某个地方你应该有类似的东西:

getzip = [[GetZipcode alloc] someAppropriateInit];

第二次编辑

在这里要考虑更多的事情。 (1)当您尝试在此处执行时,您无法立即阅读地标属性:

zip = getzip.myPlacemark;

反向地理编码器需要一段时间才能进入网络并完成工作并找出地标。因此,在获得委托回调之前,您将没有地标:

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

(2)您还应该实现此回调,以便查看找到地标时是否有问题:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error

(3)您确定要将有效坐标传递给反向地理编码器吗?您可能希望将其记录为绝对确定。