For whatever reason, my unwind segues for modal presentations weren’t working when my presenting source was my navigation’s root controller. This appears to be a common issue if you hunt around for “modal unwind doesn’t work”. A lot of the advice simply went: “You just can’t do that.”
After spending far too much time dealing with, I discovered that the autocomplete version, namely:
@IBAction func unwind(for unwindSegue: UIStoryboardSegue, towards subsequentVC: UIViewController)
doesn’t work. Instead, what you need is:
@IBAction func unwindFor(_ unwindSegue: UIStoryboardSegue, towards subsequentVC: UIViewController)
If you notice, the difference is unwind(for
vs unwindFor(
. I figured this out by implementing
func canPerformUnwindSegueAction(_ action: Selector, from fromViewController: UIViewController, withSender sender: Any) -> Bool
and looking at the selector it expected to perform (specifically unwindFor:towards:
). Moving the For
outside fixed the problem and granted me a working unwind, allowing me to fetch state data from the modal controller and pass it back to the source.
I assume this issue arose because of the automatic translation of Cocoa APIs into Swift and I wonder if there are other issues that might arise from the same. Have you encountered such things? What are your thoughts?
One Comment
Something similar happened to me migrating a project to Swift 3.
In Swift 3:
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
became
func numberOfSections(in collectionView: UICollectionView) -> Int
The problem was that the migrator did not pick this up and since it is an optional protocol method I had a silent bug that took many hours to figure out.