所以我是面向对象编程的新手,我正在尝试在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,但我真的很感激这里的一些帮助。谢谢!
答案 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)您确定要将有效坐标传递给反向地理编码器吗?您可能希望将其记录为绝对确定。