From 234143a4169f8d847a72c40ad83b405b935adf2f Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Wed, 5 Sep 2018 13:22:43 -0400 Subject: [PATCH] fix crash fix crash by removing observer when operation finished --- .../PresentationHandling/MVMCoreNavigationOperation.m | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m index a7e637d..9018f9e 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m +++ b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.m @@ -17,6 +17,7 @@ @interface MVMCoreNavigationOperation () @property (strong, nonatomic) MVMCoreNavigationObject *navigationObject; +@property (strong, nonatomic) id animatedTransitioning; @end @@ -217,6 +218,10 @@ [[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] stopLoading:YES]; self.navigationObject.stopLoadingOverlay = NO; } + if (self.animatedTransitioning) { + [self.animatedTransitioning removeObserver:self forKeyPath:@"interactiveTransitionCanceled"]; + self.animatedTransitioning = nil; + } [super markAsFinished]; } @@ -244,6 +249,7 @@ id animatedTransitioning = [self.delegate navigationController:navigationController animationControllerForOperation:operation fromViewController:fromVC toViewController:toVC]; if ([animatedTransitioning conformsToProtocol:@protocol(MVMCoreViewControllerAnimatedTransitioning)]) { [animatedTransitioning addObserver:self forKeyPath:@"interactiveTransitionCanceled" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil]; + self.animatedTransitioning = animatedTransitioning; } return animatedTransitioning; } else { @@ -261,7 +267,6 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"interactiveTransitionCanceled"]) { - [object removeObserver:self forKeyPath:@"interactiveTransitionCanceled"]; BOOL transitionCanceled = ((NSNumber *)change[NSKeyValueChangeNewKey]).boolValue; if (transitionCanceled) { //When interactive transition canceled, the destination viewController should be removed from navigationController