Skip to content

Commit 7eac420

Browse files
committed
Merge branch '377-error-countbyenumeratingwithstate-objects-count' into 'master'
Resolve "Error: countByEnumeratingWithState:objects:count: >" Closes #377 See merge request pace/mobile/ios/pace-cloud-sdk!432
2 parents 78412be + 3b22db8 commit 7eac420

File tree

1 file changed

+46
-20
lines changed

1 file changed

+46
-20
lines changed

PACECloudSDK/AppKit/Extensions/UIViewController+Extension.swift

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,62 @@ import UIKit
99

1010
extension UIViewController {
1111
var isGettingDismissed: Bool {
12-
isBeingDismissed ||
13-
isMovingFromParent ||
14-
navigationController?.isBeingDismissed == true ||
15-
isUnderlyingViewControllerBeingDismissed(of: self)
12+
return isBeingDismissed
13+
|| isMovingFromParent
14+
|| navigationController?.isBeingDismissed == true
15+
|| checkUnderlyingDismissal()
1616
}
1717

18-
private func isUnderlyingViewControllerBeingDismissed(of viewController: UIViewController?) -> Bool {
19-
let presentingViewController = viewController?.presentingViewController
20-
let presentedViewController = viewController?.presentedViewController
18+
private func checkUnderlyingDismissal() -> Bool {
19+
var visited = Set<ObjectIdentifier>()
20+
return isUnderlyingViewControllerBeingDismissed(of: self, visited: &visited)
21+
}
22+
23+
private func isUnderlyingViewControllerBeingDismissed(
24+
of viewController: UIViewController?,
25+
visited: inout Set<ObjectIdentifier>
26+
) -> Bool {
27+
guard let vc = viewController else { return false }
28+
let id = ObjectIdentifier(vc)
29+
guard !visited.contains(id) else { return false }
30+
visited.insert(id)
2131

22-
if presentingViewController == nil && presentedViewController == nil {
23-
return false
32+
if isParentDismissed(vc, visited: &visited) {
33+
return true
2434
}
2535

26-
if presentingViewController == nil {
27-
if presentedViewController?.isBeingDismissed == true {
28-
return true
29-
}
36+
return isChildDismissed(vc, visited: &visited)
37+
}
38+
39+
private func isParentDismissed(
40+
_ vc: UIViewController,
41+
visited: inout Set<ObjectIdentifier>
42+
) -> Bool {
43+
guard let presenting = vc.presentingViewController else { return false }
3044

31-
return isUnderlyingViewControllerBeingDismissed(of: presentedViewController)
45+
if presenting.isBeingDismissed {
46+
return true
3247
}
3348

34-
if presentedViewController == nil {
35-
if presentingViewController?.isBeingDismissed == true {
36-
return true
37-
}
49+
return isUnderlyingViewControllerBeingDismissed(
50+
of: presenting,
51+
visited: &visited
52+
)
53+
}
54+
55+
private func isChildDismissed(
56+
_ vc: UIViewController,
57+
visited: inout Set<ObjectIdentifier>
58+
) -> Bool {
59+
guard let presented = vc.presentedViewController else { return false }
3860

39-
return isUnderlyingViewControllerBeingDismissed(of: presentingViewController)
61+
if presented.isBeingDismissed {
62+
return true
4063
}
4164

42-
return isUnderlyingViewControllerBeingDismissed(of: presentingViewController) || isUnderlyingViewControllerBeingDismissed(of: presentedViewController)
65+
return isUnderlyingViewControllerBeingDismissed(
66+
of: presented,
67+
visited: &visited
68+
)
4369
}
4470
}

0 commit comments

Comments
 (0)