UINavigationControllerDelegate method being called twice

Number:rdar://29912893 Date Originated:06-Jan-2017 06:57 PM
Status:Duplicate/9602023 Resolved:
Product:iOS + SDK Product Version:
Classification: Reproducible:

The following application architecture:

- UITabBarController (root)
-- UINavigationController (delegate = AppDelegate or any other object)
-- UINavigationController (delegate = AppDelegate or any other object)
-- ...

causes duplicate delegate calls to the following UINavigationControllerDelegate method if the navigation controller in the tab bar controller hasn't been loaded yet and is being selected in the tab bar:

func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool)

every consequential selection of the view controller in the tab bar causes correctly just one call.

Steps to Reproduce:
1. Launch provided sample code (Sample.xcodeproj)
2. Toggle console ON
3. Switch to "Second" tab (not loaded yet)
>> logs 2 lines
4. Switch to "Third" tab (not loaded yet)
>> logs 2 lines
5. Switch back to any tab (all are loaded now)
>> logs 1 line

Expected Results:
Each tab selection should only call the UINavigationControllerDelegate method once

Actual Results:
For controllers that are still not loaded the UINavigationControllerDelegate method is being called twice

iOS 10


iPhone 7

'Sample.zip' was successfully uploaded.


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!