У меня есть MKMap
с серией MKAnnotations
, все из которых красные, что нормально. Я выбрал "показать местоположение пользователя" в IB и чтобы изменить MKAnnotation
с красного на синий, у меня есть код в моем viewForAnnotation
методе:
if (annotation == theMap.userLocation)
return nil;
Все хорошо и приложение работает нормально, но если пользователь случайно коснется синей точки userlocation, я получу следующий сбой:
2012-02-01 20:43:47.527 AusReefNSW[27178:11603] -[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720
2012-02-01 20:43:47.528 AusReefNSW[27178:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720'
*** First throw call stack:
Если я удалю вышеуказанный код, все работает хорошо, но значок остается красным. Я предпочитаю иметь синий значок, но пока не обнаружил причину сбоя. Буду признателен за любые идеи. Спасибо.
РЕШЕНО! Спасибо, Марвин, и вот код, если он кому-то пригодится. В двух словах, мне нужно было сначала проверить, относится ли MKAnnotation к классу MyAnnotation или к классу MKUserLocation.
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view
{
theAnnotationSelected = [[mapView selectedAnnotations] objectAtIndex:0];
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]] )
{
view.pinColor = MKPinAnnotationColorGreen;
}
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKPinAnnotationView *)view
{
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]] )
{
view.pinColor = MKPinAnnotationColorRed;
}