Не удается передать данные при добавлении навигационного контроллера для просмотра

У меня есть TabBarController с тремя вкладками. Представления для всех вкладок были встроены в собственный навигационный контроллер, кроме одного, представления «Карта». Чтобы перейти от одного из других представлений к представлению карты и передать данные, которые я использовал:

- (IBAction)mapButton:(id)sender {
    MapViewController *destView = (MapViewController *)[self.tabBarController.viewControllers objectAtIndex:0];
    if ([destView isKindOfClass:[MapViewController class]])
    {
        MapViewController *destinationViewController = (MapViewController *)destView;
        destinationViewController.selectedTruck = _truck;
    }
    [self.tabBarController setSelectedIndex:0];
}

И это работало. Теперь мне также нужно встроить представление «Карта» в контроллер навигации, чтобы добавить подробное представление, но когда я не передаю данные, они переходят только в представление «Карта».

Может ли кто-нибудь увидеть, что мне не хватает?


person pouncelciot    schedule 27.05.2015    source источник
comment
destView может быть нулевым? это даст вам истину для isKindOfClass, но это не значит, что это не ноль?   -  person Omarj    schedule 27.05.2015
comment
я не могу понять вашу проблему.   -  person Pramod Tapaniya    schedule 27.05.2015
comment
вы можете загрузить изображение раскадровки?   -  person Pramod Tapaniya    schedule 27.05.2015


Ответы (1)


[self.tabBarController.viewControllers objectAtIndex:0] больше не является экземпляром MapViewController. Это UINavigationController с MapViewController в качестве корневого контроллера представления.

Вы можете получить доступ к MapViewController через UINavigationController вот так, но все эти предположения о приведении типов беспорядочны -

- (IBAction)mapButton:(id)sender {
    UINavigationController *navigationController = (UINavigationController *)[self.tabBarController.viewControllers firstObject];
    if ([navigationController isKindOfClass:[UINavigationController class]])
    {
        MapViewController *rootViewController = (MapViewController *)[navigationController.viewControllers firstObject];
        if ([rootViewController isKindOfClass:[MapViewController class]])
        {
            MapViewController *destinationViewController = (MapViewController *)rootViewController;
            destinationViewController.selectedTruck = _truck;
        }
    }
    [self.tabBarController setSelectedIndex:0];
}

Вместо этого лучше было бы сохранить ссылку на MapViewController (как на свойство) при настройке панели вкладок. Таким образом, вместо этого вы просто вызовете self.destinationViewController.selectedTruck = _truck;.

person johnpatrickmorgan    schedule 27.05.2015
comment
Спасибо за ваш ответ. Итак, я бы использовал что-то вроде этого? UINavigationController *destViewNVC = [[собственная раскадровка] instanceViewControllerWithIdentifier:@MapNavVC]; но тогда что? Извините, я немного новичок в этом. - person pouncelciot; 27.05.2015