Skip to content

Commit d5231d9

Browse files
authored
Fix UIViewControllerHierarchyInconsistency crash (#732)
1 parent e1bb9b9 commit d5231d9

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

ios/AirshipEmbeddedViewWrapper.swift

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,20 @@ public final class AirshipEmbeddedViewWrapper: UIView {
3939

4040
public override func didMoveToWindow() {
4141
super.didMoveToWindow()
42-
guard !self.isAdded else { return }
43-
self.viewController.willMove(toParent: self.parentViewController())
44-
self.parentViewController().addChild(self.viewController)
45-
self.viewController.didMove(toParent: self.parentViewController())
42+
43+
if self.window == nil {
44+
if self.isAdded {
45+
self.viewController.willMove(toParent: nil)
46+
self.viewController.removeFromParent()
47+
self.isAdded = false
48+
}
49+
return
50+
}
51+
52+
guard !self.isAdded, let parentVC = self.parentViewController() else { return }
53+
self.viewController.willMove(toParent: parentVC)
54+
parentVC.addChild(self.viewController)
55+
self.viewController.didMove(toParent: parentVC)
4656
self.viewController.view.isUserInteractionEnabled = true
4757
isAdded = true
4858
}
@@ -53,18 +63,16 @@ public final class AirshipEmbeddedViewWrapper: UIView {
5363
}
5464
}
5565

56-
extension UIView
57-
{
58-
//Get Parent View Controller from any view
59-
func parentViewController() -> UIViewController {
66+
extension UIView {
67+
func parentViewController() -> UIViewController? {
6068
var responder: UIResponder? = self
61-
while !(responder is UIViewController) {
62-
responder = responder?.next
63-
if nil == responder {
64-
break
69+
while let r = responder {
70+
if let vc = r as? UIViewController {
71+
return vc
6572
}
73+
responder = r.next
6674
}
67-
return (responder as? UIViewController)!
75+
return nil
6876
}
6977
}
7078

0 commit comments

Comments
 (0)