Erstellt ein sehr einfaches (Einzelansicht) Beispielprojekt aus einem Teil eines größeren. Es funktionierte mit dem iOS SDK 8.3.MPPoviePlayerController unter ARC im iOS SDK 8.4 auf dem iPad veröffentlicht
Wenn Sie auf die Schaltfläche "Show me" klicken, erscheint ein Video (als modal) und 2 Sekunden später verschwindet es. Sieht gut aus. Aber wenige Augenblicke später stürzt die App ab, weil eine -dealloc-Nachricht an ein bereits freigegebenes Objekt gesendet wird.
[MPAVController release]: Nachricht an deallokierten Instanz gesendet
Hier ist mein Beispielprojekt (nicht über die video.mp4 vergessen):
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
Wenn ich die ARC ausschalten, die Bug ist noch am Leben (Hinzufügen -fno-objc-Bogen-Flag für die MediaViewController.m und Hinzufügen dieser Zeile
[movieController release];
nach der Eigenschaft zuweisen.
auch mit Instrumenten geprüft:
Das Problem tritt auf iPad (die ganze Zeit), aber es scheint nicht ein Problem auf dem iPhone.
Hat jemand dieses Problem konfrontiert?
(Wahrscheinlich eine Lösung: Laden Sie die iOS 8.3 SDK und machen Archiv mit, dass)
Cheers,
Adam
Nachdem ich den Xcode 6.3.2 (mit iOS SDK 8.3) erneut heruntergeladen habe und einfach von ~/Downloads/... gelaufen bin, habe ich diesen Absturz bekommen. Nach dem Xcode 6.4 wurde gezippt (und die Quelle wurde gelöscht), die 6.3.2 zog an ihren Platz (/ Applications /) es funktionierte gut. –
Ich sehe dieses Problem auch mit 8.4. Sogar mit Archiven, die aus xcode 6.3 erstellt wurden. Ich sehe das gleiche Problem in der ios-9.0 Beta. –
Haben Sie ein Radar über dieses Problem geöffnet? – Isaac