Попробуйте изменить строку с точечного обозначения на это:
NSString *str2=[annotation title2];
и ошибка должна исчезнуть.
Что происходит, так это то, что компилятору сообщили, что аннотация - MKAnnotation
. Тот факт, что вы знаете, какие у него есть другие методы, не имеет значения; компилятор не экстрасенсорный - все, что он знает, это то, что аннотация следует протоколу MKAnnotation, не более Причина, по которой он видит средство получения заголовка, заключается в том, что заголовок определен в MKAnnotation.
Вы также можете исправить это, используя приведение:
MapLocation *mapLocation = (MapLocation *)annotation;
Теперь вы можете сказать
NSString *str2=mapLocation.title2;
потому что вы сказали компилятору, что mapLocation является объектом MapLocation.