diff --git a/ios/Video/RCTVideo.m b/ios/Video/RCTVideo.m index dbbd181345..381a6f8d3c 100644 --- a/ios/Video/RCTVideo.m +++ b/ios/Video/RCTVideo.m @@ -218,10 +218,11 @@ -(void)removePlayerTimeObserver - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self removePlayerLayer]; [self removePlayerItemObservers]; [_player removeObserver:self forKeyPath:playbackRate context:nil]; [_player removeObserver:self forKeyPath:externalPlaybackActive context: nil]; + [self removePlayerLayer]; + _player = nil; } #pragma mark - App lifecycle handlers @@ -360,9 +361,11 @@ - (void)removePlayerItemObservers - (void)setSrc:(NSDictionary *)source { _source = source; - [self removePlayerLayer]; [self removePlayerTimeObserver]; [self removePlayerItemObservers]; + [self removePlayerLayer]; + _player = nil; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) 0), dispatch_get_main_queue(), ^{ // perform on next run loop, otherwise other passed react-props may not be set @@ -1615,9 +1618,6 @@ - (void)removeFromSuperview [_player removeObserver:self forKeyPath:externalPlaybackActive context:nil]; _isExternalPlaybackActiveObserverRegistered = NO; } - _player = nil; - - [self removePlayerLayer]; [_playerViewController.contentOverlayView removeObserver:self forKeyPath:@"frame"]; [_playerViewController removeObserver:self forKeyPath:readyForDisplayKeyPath]; @@ -1632,6 +1632,9 @@ - (void)removeFromSuperview _eventDispatcher = nil; [[NSNotificationCenter defaultCenter] removeObserver:self]; + [self removePlayerLayer]; + _player = nil; + [super removeFromSuperview]; } diff --git a/package.json b/package.json index 32fbdb6613..b3dc70f61c 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,10 @@ { "name": "Hampton Maxwell", "email": "me@hamptonmaxwell.com" + }, + { + "name": "Marc Rousavy", + "email": "marcrousavy@hotmail.com" } ], "repository": {