0

I am using the following code:

 @IBAction func popToRoot(sender:UIBarButtonItem){

    navigationController.popToViewController(foodforteethViewController(), animated: false)

}

This function is linked with a custom back button and the h file is linked in the objective-c/swift bridging file. The issue with this is that I get an error as below:

2014-07-19 23:35:40.842 FoodForTeeth[9040:238499] * Assertion failure in -[UINavigationController popToViewController:transition:], /SourceCache/UIKit_Sim/UIKit-3232.3/UINavigationController.m:5345 2014-07-19 23:35:40.845 FoodForTeeth[9040:238499] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to get popped view controller.' * First throw call stack: ( 0 CoreFoundation 0x00000001023ec995 exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010209b9a3 objc_exception_throw + 45 2 CoreFoundation 0x00000001023ec7fa +[NSException raise:format:arguments:] + 106 3 Foundation 0x0000000101cc637f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195 4 UIKit 0x0000000100b456b6 -[UINavigationController popToViewController:transition:] + 762 5 FoodForTeeth 0x00000001000272fe _TFC12FoodForTeeth9dietDiary9popToRootfS0_FCSo15UIBarButtonItemT_ + 302 6 FoodForTeeth 0x00000001000274f2 _TToFC12FoodForTeeth9dietDiary9popToRootfS0_FCSo15UIBarButtonItemT_ + 66 7 UIKit 0x00000001009f76b6 -[UIApplication sendAction:to:from:forEvent:] + 75 8 UIKit 0x00000001009f76b6 -[UIApplication sendAction:to:from:forEvent:] + 75 9 UIKit 0x0000000100af91c0 -[UIControl _sendActionsForEvents:withEvent:] + 467 10 UIKit 0x0000000100af858f -[UIControl touchesEnded:withEvent:] + 522 11 UIKit 0x0000000100a3c3b8 -[UIWindow _sendTouchesForEvent:] + 735 12 UIKit 0x0000000100a3cce3 -[UIWindow sendEvent:] + 683 13 UIKit 0x0000000100a0a1a1 -[UIApplication sendEvent:] + 246 14 UIKit 0x0000000100a1707a _UIApplicationHandleEventFromQueueEvent + 17591 15 UIKit 0x00000001009f3269 _UIApplicationHandleEventQueue + 1967 16 CoreFoundation 0x0000000102322a31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 17 CoreFoundation 0x000000010231826d __CFRunLoopDoSources0 + 269 18 CoreFoundation 0x00000001023178a4 __CFRunLoopRun + 868 19 CoreFoundation 0x00000001023172d6 CFRunLoopRunSpecific + 470 20 GraphicsServices 0x0000000105475bbc GSEventRunModal + 161 21 UIKit 0x00000001009f6288 UIApplicationMain + 1282 22 FoodForTeeth 0x0000000100054db3 main + 115 23 libdyld.dylib 0x0000000102b45145 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

What's going wrong?

Prateek
  • 1,724
  • 3
  • 15
  • 27
  • `reason: 'Failed to get popped view controller.'` is telling you the result of `foodforteethViewController()` is not an instance of the an object in the navigation stack. Please, add the declaration for `foodforteethViewController()` to your question. – Jeffery Thomas Jul 19 '14 at 22:46
  • Ah yes that's the case, I'm trying to go to that view controller even if the user hasn't navigated through it – Prateek Jul 19 '14 at 22:51

2 Answers2

1

you can not pop a view controller which is not in NavigationController stack.You should pop like this

if you want pop to rootViewController than there is direct method use this

 @IBAction func popToRoot(sender:UIBarButtonItem){


        self.navigationController.popToRootViewControllerAnimated(false)
}
codester
  • 36,891
  • 10
  • 74
  • 72
  • To add to this answer, you will pop to the top of the current stack where there is a NavigationController. So placing UINavigationControllers in the right spots helps to achieve the desired results. As a side note, I was not able to use popToViewController as advertised (to pop to a higher level in the stack). I kept getting a black screen. – Mark.ewd Oct 16 '14 at 23:32
0

Another way to go back to a specific view controller would be to use unwind segues: What are Unwind segues for and how do you use them?

Community
  • 1
  • 1
mickael
  • 315
  • 4
  • 9