//EDIT2: возможно, это решит вашу проблему, реализуйте свой собственный установщик координат и запросите там свой обратный геокодер:
-(NSString *)subtitle{
if (!subtitle) {
return @"No Street";
} else {
return subtitle;
}
}
-(NSString *)title{
return @"Saved position";
}
- (void)setCoordinate:(CLLocationCoordinate2D)c {
MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c];
rvg.delegate = self;
[rvg start];
coordinate = c;
}
-(id)initWithCoordinate:(CLLocationCoordinate2D) coor{
self.coordinate=coor;
NSLog(@"%f,%f",coor.latitude,coor.longitude);
return self;
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog(@"fail %@", error);
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
self.subtitle = [placemark.addressDictionary valueForKey:@"Street"];
}
// ОРИГИНАЛ:
Давайте сначала поговорим о ваших ошибках :D
return [NSString stringWithFormat:@"%f", streetAddress];
%f
предназначен для значений с плавающей запятой, поэтому он не будет отображать строку.
Во-вторых, ваша переменная streetAddress
в настоящее время не существует, вы должны сделать ее доступной, написав ее в файле заголовка.
Затем в initWithCoordinate:
вы вызываете return self;
все, что после этой строки никогда не вызывается. Так что ваш ReverseGeocoder
никогда не заводится.
NSString *streetAddress = …
Здесь вы хотите сохранить свой адрес, но записываете его только в переменную, которая существует только в этом методе. После выполнения метода эта переменная будет освобождена. Вы бы сохранили его в переменной вашего класса, если бы вы определили его в своем заголовочном файле.
Теперь давайте поговорим о том, как вы можете это сделать. Что бы я сделал, так это удалил обратный геокодер из вашей аннотации и поместил его в ваш контроллер mapView. Затем, если вы получаете новое местоположение, вы меняете подзаголовок своей аннотации.
[[mapView.annotations objectAtIndex:0] setSubtitle:@"Address Information"];
// РЕДАКТИРОВАТЬ: вы можете зарегистрировать свой didFailWith
, и вы увидите, что он не может запросить позицию. Даже если вы поместите свой reverseGeocoder-init выше возврата, у него все еще недостаточно времени, чтобы запросить местоположение.
person
Community
schedule
29.12.2010