Мой проект сложный (возможно, слишком сложный), но вопрос простой, вот код
...
self.vc = [[ClassName alloc] init];
if ([[self.navigationController.viewControllers lastObject] isKindOfClass:[ClassName class]]) {
[self backAndGo:self.vc title:@"Title"];
}
else {
[self vai:self.vc title:@"title"];
}
...
в этом коде я должен перейти непосредственно к следующему представлению, если текущее представление отличается от ClassName
, в противном случае вернуться к 1 представлению и перейти к следующему.
- (void)backAndGo:(id)view title:(NSString *)title
- (void)backAndGo:(id)view title:(NSString *)title
{
NSLog(@"before %@,%d",[self.navigationController viewControllers],[[self.navigationController viewControllers] count]);
[self.navigationController popViewControllerAnimated:NO];
ALCParentViewController *viewController = (ALCParentViewController *)view;
[self.navigationController pushViewController:viewController animated:YES];
NSLog(@"after %@,%d",[self.navigationController viewControllers],[[self.navigationController viewControllers] count]);
}
ALCParentViewController является родительским классом vc, в этом методе первый журнал контроллера навигации корректен со всем стеком контроллеров просмотра, и выполняется popViewController
, но во втором журнале navigationController имеет значение null с элементом 0, очевидно, а метод pushViewController
нет. казнили, почему? Любые идеи?
- (void)vai:(id)view title:(NSString *)title
- (void)vai:(id)view title:(NSString *)title
{
ALCParentViewController *viewController = (ALCParentViewController *)view;
[self.navigationController pushViewController:viewController animated:YES];
}
Вместо этого это другой метод прямого доступа ко второму представлению, и он работает правильно, еще одна вещь courius (почти для меня) заключается в том, что, несмотря на нулевой pushviewcontroller, навигация (push и pop) в другом представлении работает правильно...
ИЗМЕНИТЬ 1:
Как сказал lucaslt89, я поставил точку останова во втором журнале и сделал «po self.navigationController» в консоли, вот результат
(lldb) po self.navigationController
$0 = 0x00000000 <nil>
(lldb)
это ноль, но я вижу это в журнале без точки останова...
РЕДАКТИРОВАТЬ 2:
(lldb) po self.navigationController
$0 = 0x099787d0 <UINavigationController: 0x99787d0>
(lldb) po auxNavController
$1 = 0x099787d0 <UINavigationController: 0x99787d0>
(lldb)
после операций, предложенных lucaslt89, два адреса совпадают