MKUserLocation синий userLocation MKAnnotation вызывает сбой приложения при случайном касании

У меня есть 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;
}
5
задан timv 1 February 2012 в 10:21
поделиться