контроллер навигации имеет значение null при нажатии нового представления

У меня есть приложение панели вкладок, и на одной из этих вкладок у меня есть вид карты. Я пытаюсь выдвинуть новый вид, нажав кнопку раскрытия в аннотации на виде карты, используя этот код...

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

childController = [[AnnotationDetailView alloc] initWithNibName:@"AnnotationDetailView" bundle:nil];       

[self.navigationController pushViewController:childController animated:YES];

}

однако, если я nslog NavigationController, он будет нулевым.

Что сбивает с толку, так это то, что на другой вкладке у меня есть табличное представление, которое будет отображать представление, используя приведенный выше код. Почему это работает, а аннотация карты — нет.


person ChrisM    schedule 16.09.2011    source источник
comment
ты nslog navigationController откуда?   -  person Marek Sebera    schedule 17.09.2011
comment
После того, как я попытаюсь нажать на представление   -  person ChrisM    schedule 17.09.2011


Ответы (2)


Простой ответ заключается в том, что ваше табличное представление находится внутри навигационного контроллера, а представление карты — нет. Контроллер представления вкладок на самом деле не является контроллером навигации.

В зависимости от вашего проекта исправление может быть таким же простым, как редактирование вашего XIB, чтобы навигационный контроллер был непосредственным дочерним элементом контроллера вкладок для вкладки карты, а контроллер представления карты был дочерним элементом этого навигационного контроллера. Посмотрите, как определяется ваше табличное представление, и вы сможете увидеть, что отличается.

person adpalumbo    schedule 16.09.2011
comment
Я новичок в этой игре, но пытаюсь научиться. Все еще не слишком уверен, я думаю, мне нужно будет прочитать немного больше. - person ChrisM; 17.09.2011
comment
Так как я все настроил в конструкторе интерфейсов. Как вы имеете в виду, посмотрите, как определяется табличное представление. Вы имеете в виду, какому классу он соответствует? - person ChrisM; 17.09.2011
comment
К сожалению, трудно дать вам полезную информацию, так как есть десятки способов прийти к вашей ситуации. В конце концов, где-то ваше табличное представление добавляется к контроллеру вкладок. Если вы внимательно посмотрите, где это находится, вы увидите, что навигационный контроллер фактически добавляется к контроллеру вкладок, а tableviewcontroller добавляется к этому навигационному контроллеру. В самом простом примере вы сможете увидеть эту иерархию в окне документа вашего MainWindow.xib и сможете имитировать ее для просмотра карты. Но ваша ситуация может быть более сложной. - person adpalumbo; 17.09.2011

Вы определили childController как AnnotationDetailView * childController; в своем заголовке?

или вы можете просто использовать:

AnnotationDetailView * childController = [[AnnotationDetailView alloc] initWithNibName:@"AnnotationDetailView" bundle:nil];
person WrightsCS    schedule 16.09.2011
comment
Да, я забыл упомянуть об этом - person ChrisM; 17.09.2011