transitionFromViewController: ошибка toViewController: дочерние контроллеры представления должны иметь общий родительский контроллер представления

Я пытаюсь перейти от моего текущего контроллера представления self к self.aVC, используя сдерживание контроллера представления, используя self.navigationController в качестве контейнера. Когда я запускаю следующий код, появляется ошибка «дочерние контроллеры представления должны иметь общий родительский контроллер представления», но два NSLogs показывают один и тот же parentViewController.

В чем здесь проблема? Любая помощь приветствуется.

[self willMoveToParentViewController:nil];
[self.navigationController addChildViewController:self.aVC];
[self.aVC.view setFrame:self.bottomFrame];

NSLog(@"%@",self.parentViewController);
NSLog(@"%@",self.aVC.parentViewController);

//    __weak __block SBSomeVC *weakSelf = self;
[self transitionFromViewController:self toViewController:self.aVC duration:0.3 options:UIViewAnimationOptionTransitionNone animations:^{
    [self.aVC.view setFrame:self.view.bounds];
} completion:^(BOOL finished) {
    [self.aVC didMoveToParentViewController:self.navigationController];
    [self removeFromParentViewController];
}];



Ответы (2)


Насколько я понимаю, -transitionFromViewController:toViewController:duration: должен вызываться на данном контроллере представления для перехода между двумя дочерними контроллерами представления.

Итак, в вашем случае вы должны переместить этот вызов метода в класс контроллера родительского представления.

Вы также должны убедиться, что оба контроллера представления, которые вы передаете в качестве аргументов, уже добавлены в качестве дочерних контроллеров представления родительского, иначе вы будете получать ту же ошибку.

Ссылка: https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

person Andrea Sprega    schedule 05.03.2014

Ошибка:

Контроллеры дочернего представления должны иметь общий родительский контроллер представления

рассказывает вам все. Оба контроллера представления, участвующие в переходе, должны иметь одного и того же родителя. Поэтому вам нужно добавить их обоих к родителю, используя метод addChildViewController:. В противном случае это не сработает.

Метод transitionFromViewController:toViewController:duration должен вызываться родительским контроллером представления. Не ребенком.

person Rafa de King    schedule 05.03.2014