MPMoviePlayerController Sobnetworkingimido bajo ARC en iOS SDK 8.4 en iPad

Se creó un proyecto de muestra muy simple (vista única) de una parte de uno más grande. Funcionó con iOS SDK 8.3.

Cuando presionas el button "Mostrar", aparece un video (como modal) y 2 segundos más tarde, desaparece. Se ve bien. Pero pocos instantes después, la aplicación se bloquea porque un post -dealloc se envía a un object ya desasignado.

[Release MPAVController]: post enviado a la instancia desasignada

Aquí está mi proyecto de muestra (no te olvides del Video.mp4):

ViewController.h

#import <UIKit/UIKit.h> @interface ViewController : UIViewController @end 

ViewController.m

 #import "ViewController.h" #import "MediaViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setTitle:@"Show me!" forState:UIControlStateNormal]; button.frame = CGRectMake(10.0, 10.0, 100.0, 30.0); [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; } - (void)buttonTapped:(id)sender { MediaViewController *mediaVC = [[MediaViewController alloc] initWithNibName:nil bundle:nil]; [self presentViewController:mediaVC animated:YES completion:^{ [self performSelector:@selector(dismissPresentedController) withObject:nil afterDelay:2.0]; }]; } - (void)dismissPresentedController { [self.presentedViewController dismissViewControllerAnimated:YES completion:nil]; } @end 

MediaViewController.h

 #import <UIKit/UIKit.h> @interface MediaViewController : UIViewController @end 

MediaViewController.m

 #import "MediaViewController.h" #import <MediaPlayer/MediaPlayer.h> @interface MediaViewController () @property (nonatomic) MPMoviePlayerController *movieController; @end @implementation MediaViewController - (void)viewDidLoad { [super viewDidLoad]; MPMoviePlayerController *movieController = [[MPMoviePlayerController alloc] initWithContentURL:[[NSBundle mainBundle] URLForResource:@"Video" withExtension:@"mp4"]]; movieController.repeatMode = MPMovieRepeatModeOne; movieController.controlStyle = MPMovieControlStyleNone; movieController.scalingMode = MPMovieScalingModeAspectFill; [movieController prepareToPlay]; self.movieController = movieController; UIView *movieView = movieController.view; movieView.frame = CGRectZero; movieView.translatesAutoresizingMaskIntoConstraints = NO; [self.view insertSubview:movieView atIndex:0]; // Autolayout NSDictionary *layoutNeededViews = NSDictionaryOfVariableBindings(movieView); [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[movieView]|" options:0 metrics:nil views:layoutNeededViews]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[movieView]|" options:0 metrics:nil views:layoutNeededViews]]; } @end 

Si apago el ARC, el error sigue vivo (agregando el indicador -fno-objc-arc para MediaViewController.m y agregando esta línea

 [movieController release]; 

después de la asignación de la propiedad.

También marcada con instrumentos: Verificación de instrumentos para objetos zombis

El problema se produce en el iPad (todo el time), pero parece que no es un problema en el iPhone.

¿Alguien ha enfrentado este problema?

(Probablemente sea una solución: descargue el SDK de iOS 8.3 y haga un file con eso)

Aclamaciones,

Adán

Hmm … tal vez tengo una solución para eso, solo pruébalo (ya funciona para mí, hizo muchas testings)

Intente esto: en su MediaViewController agregue / anule la viewDidDisappear método viewDidDisappear como este:

  func viewDidDisappear(animated: Bool) { super.viewDidDisappear(animated) //just a small fix for error on iPad iOS8.4 self.movieController.stop() } 

Si no funciona, agréguelo también a la vista viewWillDisappear , funcionó para mí.

Mi aplicación funciona bien en ios8.3, pero muestra este problema de liberación en 8.4. Supuse que había roto algo hasta que leí tu pregunta. Probé la aplicación en iOS8.3.