What really needs customization here is the annotation. You're not having any trouble getting from the annotation view to the annotation; the problem is that the annotation is uninformative. What you want to do is create your own annotation class, an NSObject subclass that implements the MKAnnotation protocol, like this:
@interface MyAnnotation : NSObject <MKAnnotation>
@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title, *subtitle;
- (id)initWithLocation:(CLLocationCoordinate2D)coord;
@end
@implementation MyAnnotation
- (id)initWithLocation: (CLLocationCoordinate2D) coord {
self = [super init];
if (self) {
self->_coordinate = coord;
}
return self;
}
@end
That's minimal, but now you can expand on it. In particular, you can add another property that stores extra info about this annotation. When you create the annotation and add it to the map, you create an instance of this class and assign it the info you will need to fetch later.
My book discusses this in depth:
http://www.apeth.com/iOSBook/ch34.html#_annotations
And you can download a working project that develops this notion:
https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch34p848map/p707p723map