Приложение пыталось отправить контроллер с нулевым представлением на целевой iOS7

У меня есть «проблема» со следующим кодом. Сообщение об ошибке: Приложение пыталось передать нулевой контроллер представления на целевой UINavigationController:0x10b82bbf0 при нажатии на выноску аннотации № 4. Как я могу открыть окно оповещения, не получая этой ошибки?

//Callout button action

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view       
calloutAccessoryControlTapped:(UIControl *)control{
  if ([view.annotation isKindOfClass:[Annotation class]])
  {
    Annotation *myAnn = (Annotation *)view.annotation;
    id vcToPush = nil;
    if ([[myAnn title] isEqualToString:@"1. Annotation one"]){
        vcToPush = [[FirstViewController alloc]init];
    }
    if ([[myAnn title] isEqualToString:@"2. Annotation two"]){
        vcToPush = [[SecondViewController alloc]init];
    }
    if ([[myAnn title] isEqualToString:@"3. Annotation three"]){
        vcToPush = [[ThirdViewController alloc]init];
    }
    if ([[myAnn title] isEqualToString:@"4. Annotation four"]){
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Fourth annotation" message:@"Message" delegate:nil cancelButtonTitle:@"OK" 
  otherButtonTitles:nil];
        [alertView show];
    }

    [self.navigationController pushViewController:vcToPush animated:YES];
  }
}


//Custom callout

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)myAnn {
//Current location blue dot
if ([myAnn isKindOfClass:[MKUserLocation class]])
{
    ((MKUserLocation *)myAnn).title = @"My position";
    return nil;
}//
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
if (!pinView) {
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:myAnn reuseIdentifier:@"pinView"];
    pinView.pinColor = MKPinAnnotationColorRed;
    pinView.canShowCallout = YES;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
}
else
{
    pinView.annotation = myAnn;
}
return pinView;
}

Спасибо!


person Max1980    schedule 18.07.2014    source источник


Ответы (1)


В блоке если

if ([[myAnn title] isEqualToString:@"4. Annotation four"]){

vcToPush не инициализируется. Следовательно, имеет значение, которое было до вызова метода (в данном случае nil).

Я предполагаю, что вы хотите показывать предупреждение только в случае № 4. В этом случае добавьте возврат в блок if:

if ([[myAnn title] isEqualToString:@"4. Annotation four"]){
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Fourth annotation" message:@"Message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
    return;
}
person dasdom    schedule 18.07.2014