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

Имам 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 = [[self storyboard] instantiateViewControllerWithIdentifier:@MapNavVC]; но после какво? Съжалявам, малко съм нов в това. - person pouncelciot; 27.05.2015