Set annotation's title as current address

[亡魂溺海] 提交于 2019-12-01 22:46:13

You are returning the address while modifying it inside an asynchronous block. You should move the return inside the block, or a create a protocol to handle passing this information back to the caller.

Change the block to this:

- (void)addrAtLocation:(CLLocation *)location{
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemark, NSError *error) {
        CLPlacemark *topResult = [placemark objectAtIndex:0];
        whereAmIAnnotation.addr = [NSString stringWithFormat:@"%@ %@ %@ %@", topResult.country, topResult.locality, topResult.subLocality, topResult.thoroughfare];
    }];
}

Then make whereAmIAnnotation a member variable. Do you understand WHY this fixes your issues?

Create .h file

@interface MapPinClass : NSObject <MKAnnotation>{
CLLocationCoordinate2D coordinate; 
NSString *title; 
NSString *subtitle,*color,*index,*locationId;

}

@property (nonatomic, assign) CLLocationCoordinate2D coordinate; 
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle,*color,*index,*locationId;

Create .m file

@implementation MapPinClass
@synthesize coordinate,title,subtitle,color,index,locationId;

-(void)dealloc{
[title release];
[super dealloc];

}

write a code where you set

 MapPinClass *ann = [[MapPinClass alloc] init]; 
ann.title = AppMain.Heading;
ann.subtitle = AppMain.Detail; 
ann.coordinate = region.center; 
[myMapView addAnnotation:ann];    
lu yuan

I should implement this method

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation{}

Sorry for that stupid question.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!