Контекст:popToRootViewController, когда другой выбрана вкладка
Я использую TabViewController и NavigationController одновременно. Две вкладки: RECENT
и POPULAR
, и они показывают список сообщений. Представьте, что вы находитесь на вкладке RECENT
и щелкните сообщение, и вы переходите в вид postsShow
. Итак, вы один глубже в стеке навигации. Когда вы переходите на вкладку POPULAR
и возвращаетесь на вкладку RECENT
, вы по-прежнему видите сообщение, которое вы нажали раньше. Но вместо этого я хочу показать список сообщений.
То, что я пытаюсь:
Я устанавливаю PostsShowViewController
в TabBarControllerDelegate
и при выборе вкладки элемент, я пытаюсь совать его просмотра корневой контроллер. Затем, когда пользователь вернется, он увидит rootViewController, который является списком сообщений, а не представлением PostsShow.
Код:
viewDidAppear self.tabBarController.delegate = self;
viewDidDisappear self.tabBarController.delegate = nil;
Заголовок UITabBarControllerDelegate
- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
[self.navigationController popToRootViewControllerAnimated:NO];
return YES;
}
Как это не работает:
- Перейти к недавней вкладке
- Нажмите на публикацию, чтобы перейти к виду PostsShow
- Перейти к популярной вкладке
- Вернуться назад в последнее время (я ожидаю увидеть список сообщений вместо просмотра PostsShow)
- Ошибка!
EXC_BAD_ACCESS
EDIT: После того, что ответы предлагаю делать, я получаю немного лучше поведение, но до сих пор в конечном итоге с ошибкой.
Код
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
UINavigationController *navigation = (UINavigationController*) viewController;
[navigation popToRootViewControllerAnimated:NO];
}
- перейти к недавней закладке
- нажмите сообщение, чтобы перейти к PostsShowview
- перейти к популярной вкладке
- вернуться к недавней закладке
- я вижу список сообщений (без ошибок!)
- вернитесь к популярной вкладке: ERR_BAD_ACCESS!
EDIT2:
полный стек след:
* thread #1: tid = 0x4a37c, 0x0000000197bb7bd0 libobjc.A.dylib`objc_msgSend + 16, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
frame #0: 0x0000000197bb7bd0 libobjc.A.dylib`objc_msgSend + 16
frame #1: 0x000000018ab52078 UIKit`-[UITabBarController _tabBarItemClicked:] + 104
frame #2: 0x000000018a9891ec UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96
frame #3: 0x000000018ab51fb4 UIKit`-[UITabBar _sendAction:withEvent:] + 468
frame #4: 0x000000018a9891ec UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96
frame #5: 0x000000018a9722c8 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 612
frame #6: 0x000000018ab51bec UIKit`-[UITabBar(Static) _buttonUp:] + 128
frame #7: 0x000000018a9891ec UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96
frame #8: 0x000000018a9722c8 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 612
frame #9: 0x000000018a988b88 UIKit`-[UIControl touchesEnded:withEvent:] + 592
frame #10: 0x000000018a947da8 UIKit`_UIGestureRecognizerUpdate + 8536
frame #11: 0x0000000185e8fff0 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
frame #12: 0x0000000185e8cf7c CoreFoundation`__CFRunLoopDoObservers + 360
frame #13: 0x0000000185e8d35c CoreFoundation`__CFRunLoopRun + 836
frame #14: 0x0000000185db8f74 CoreFoundation`CFRunLoopRunSpecific + 396
frame #15: 0x000000018f8136fc GraphicsServices`GSEventRunModal + 168
frame #16: 0x000000018a9bad94 UIKit`UIApplicationMain + 1488
* frame #17: 0x0000000100023ff4 toaster-objc`main(argc=1, argv=0x000000016fdeba50) + 124 at main.m:14
frame #18: 0x000000019824ea08 libdyld.dylib`start + 4
Что такое иерархия? TabBarViewController -> NavigationController? – Miknash
@NickCatib Да. Каждый tabItem подключается к NavigationController. –
см. Эту ссылку может помочь вам http://stackoverflow.com/questions/21017985/call-poptorootviewcontroller-from-another-tab –