cllocation和mkreversegeocoder

时间:2010-04-14 12:06:19

标签: iphone cllocationmanager cllocation mkreversegeocoder

我尝试使用cllocation和mkreversegeocoder来检索城市名称。 在我的viewdidload方法中,我是cllocationmanager:

self.locManager = [[CLLocationManager alloc] init];
locManager.delegate = self;
locManager.desiredAccuracy = kCLLocationAccuracyBest;
[locManager startUpdatingLocation];

之后:

- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation 
*)newLocation
fromLocation:(CLLocation *)oldLocation {
//some code to retrieve my information

MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc]     
initWithCoordinate:newLocation.coordinate ];
geoCoder.delegate = self;
[geoCoder start];
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark  
*)placemark
{
MKPlacemark *myPlacemark = placemark;
citta.text = [placemark locality];
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
citta.text =@ "Unknow";

应用程序仅在我第一次获得我的价值时起作用。在第二次应用程序崩溃。 我认为是因为地理编码器已启动,我认为我必须只有一个运行。 (但我真的不是这个......)。以何种方式我可以控制地理编码器正在运行?

我已经看到我可以使用cllocationcoordinate2d在我的viewdidload中使用mkreversegeocoder但是......我可以通过哪种方式检索newlocation.coordinate?

我已部分解决将地理编码器声明为类变量并检查

的问题
if (self.geocoder != nil) {
   [geocoder release];
}

但....如果在我的

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

或在我的

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailedWithError:(@NSError 
*)error

我发布或取消我的对象? 我感觉很蠢:D

1 个答案:

答案 0 :(得分:7)

不要将反向地理编码器创建为局部变量。

查看Apple提供的CurrentAddress示例应用程序中的MKReverseGeocoder示例。请参阅MapViewController.h和MapViewController.m。

在代码中使用相同的模式。