diff --git a/ios/RCCManagerModule.m b/ios/RCCManagerModule.m index 86aa9eeb9cb..b0d4c00a9a0 100755 --- a/ios/RCCManagerModule.m +++ b/ios/RCCManagerModule.m @@ -142,6 +142,8 @@ -(void)animateSnapshot:(UIView*)snapshot animationType:(NSString*)animationType -(void)dismissAllModalPresenters:(NSMutableArray*)allPresentedViewControllers resolver:(RCTPromiseResolveBlock)resolve { + UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; + if (allPresentedViewControllers.count > 0) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^ @@ -151,7 +153,7 @@ -(void)dismissAllModalPresenters:(NSMutableArray*)allPresentedViewControllers re { counter++; - [[RCCManager sharedIntance] unregisterController:viewController]; + if (viewController.presentedViewController != nil) { dispatch_semaphore_t dismiss_sema = dispatch_semaphore_create(0); @@ -160,6 +162,10 @@ -(void)dismissAllModalPresenters:(NSMutableArray*)allPresentedViewControllers re { [viewController dismissViewControllerAnimated:NO completion:^() { + if (rootViewController != viewController) { + [[RCCManager sharedIntance] unregisterController:viewController]; + } + if (counter == allPresentedViewControllers.count && allPresentedViewControllers.count > 0) { [allPresentedViewControllers removeAllObjects];