Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Child Coordinator is deallocated if presented too quickly #208

Open
chefnobody opened this issue May 27, 2021 · 3 comments
Open

Child Coordinator is deallocated if presented too quickly #208

chefnobody opened this issue May 27, 2021 · 3 comments

Comments

@chefnobody
Copy link

chefnobody commented May 27, 2021

Presenting a child coordinator too quickly sometimes results in the Coordinator getting deallocated. Find the attached sample project as proof.

https://github.com/chefnobody/DeallocSample

In the attached project, you will find NavigationCoordinators that trigger some action after 1.0 second:

RootCoordinator pushes ListCoordinator, which presents ProfileCoordinator, which presents OnboardingCoordinator.

Line ~73 of AppDelegate reads like this:

// Change this line's dispatch time to `.now() + 1.0` to avoid the bug:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
   self?.trigger(.profile)
}

Run the code as-is should result in a log like this:

*****
ProfileCoordinator deinit

Changing the dispatch delay time on line 73 to 1.0:

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
   self?.trigger(.profile)
}

Does not cause ProfileCoordinator to deallocate and successfully presents the final OnboardingCoordinator

@chefnobody chefnobody changed the title Child Coordinator is deallocated if presented _too quickly_ Child Coordinator is deallocated if presented too quickly May 27, 2021
@ericklborges
Copy link

@chefnobody I am facing the same issue, did you find anyway to avoid it rather than adding a manual delay?

@ericklborges
Copy link

The only think that worked for me was to manually manage the coordinator reference.

var fooCoordinator: FooCoordinator?

func showFoo() -> NavigationTransition {
    let coordinator = FooCoordinator()
    fooCoordinator = coordinator // and latter fooCoordinator = nil
    return .present(coordinator)
}

@aaron-anchor
Copy link

@ericklborges it's been a long time since I looked at this and no, I didn't solve it w/o the delay. Also, I just stopped using this lib as its not really being maintained.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants