2014-09-28 15 views
8

Ich portiere eine Anwendung auf iOS 8. Ich hatte Code, um ein Video zu spielen, das vorher arbeitete, aber jetzt tut es nicht.MPMoviePlayerController Layout-Constraint-Probleme

Wenn ich es laufen lasse, erhalte ich folgende Fehler:

(
"<NSLayoutConstraint:0x7faba2df5940 H:|-(34)-[MPKnockoutButton:0x7faba2e6d750](LTR) (Names: '|':_UIBackdropContentView:0x7faba2dc38c0)>", 

"<NSLayoutConstraint:0x7faba2d51780 H:[MPKnockoutButton:0x7faba2e6d750]-(34)-[MPDetailSlider:0x7faba2dc6440](LTR)>", 

"<NSLayoutConstraint:0x7faba2d5b7f0 H:[MPDetailSlider:0x7faba2dc6440]-(34)-[UIView:0x7faba2dc4060](LTR)>", 

"<NSLayoutConstraint:0x7faba2dc5da0 UIView:0x7faba2dc4060.right == _UIBackdropView:0x7faba2dbfdc0.right>", 

"<NSLayoutConstraint:0x7faba2dc58d0 H:|-(0)-[_UIBackdropView:0x7faba2dbfdc0] (Names: '|':MPVideoPlaybackOverlayView:0x7faba2dbf6a0)>", 

"<NSLayoutConstraint:0x7faba2dc5950 H:[_UIBackdropView:0x7faba2dbfdc0]-(0)-| (Names: '|':MPVideoPlaybackOverlayView:0x7faba2dbf6a0)>", 

"<NSLayoutConstraint:0x7faba2df9b10 H:[MPVideoPlaybackOverlayView:0x7faba2dbf6a0(0)]>", 

"<NSAutoresizingMaskLayoutConstraint:0x7faba2dfbfa0 h=-&- v=-&- _UIBackdropContentView:0x7faba2dc38c0.midX == _UIBackdropView:0x7faba2dbfdc0.midX>", 

"<NSAutoresizingMaskLayoutConstraint:0x7faba2dfbff0 h=-&- v=-&- _UIBackdropContentView:0x7faba2dc38c0.width == _UIBackdropView:0x7faba2dbfdc0.width>" 
) 

Hier ist der Code:

movieController = [[MPMoviePlayerController alloc] 
       initWithContentURL:[NSURL URLWithString:playlistUrl]]; 

movieController.movieSourceType = MPMovieSourceTypeStreaming; 
[movieController.view setFrame:[self.playerView bounds]]; 

[self.playerView addSubview:movieController.view]; 
[movieController play]; 

Irgendwelche Gedanken?

Antwort

7

Dies scheint in iOS 8.1 behoben zu sein. Der Fehler ist nach dem Upgrade verschwunden.

Allerdings musste ich meinen Code leicht ändern:

movieController = [[MPMoviePlayerController alloc] 
        initWithContentURL:[NSURL URLWithString:playlistUrl]]; 

movieController.movieSourceType = MPMovieSourceTypeStreaming; 

[movieController.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[playerView addSubview:movieController.view]; 

id views = @{ @"player": movieController.view }; 

[playerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[player]|" 
                     options:0 
                     metrics:nil 
                     views:views]]; 

[playerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[player]|" 
                     options:0 
                     metrics:nil 
                     views:views]]; 
[movieController play]; 
+0

Danke, Simon, das hat mir viel Zeit gespart! –

1

Ich bin gerade selbst auf dieses Problem gestoßen.

Ich bemerkte, dass die Constraint-Warnungen auch ohne die MKMoviePlayerController Ansicht auf dem Bildschirm erscheinen würde und bevor ich jemals darauf zugegriffen habe.

Dies führte mich dazu, meine Aufrufe an die Thumbnail-Generierung APIs requestThumbnailImagesAtTimes:timeOption: und cancelAllThumbnailImageRequests zu entfernen.

Nach einer alternativen Methode zum Abrufen von Miniaturansichten wurden die Warnungen sofort gestoppt.

Ich lade zwar lokale URLs, streame nicht - aber ich stelle mir vor, dass der Streaming-Mechanismus versucht, ein Thumbnail irgendwo zu laden und die Probleme verursacht, die wir sehen.

Ich habe keine dokumentierten Lösungen oder Antworten zu diesem Problem bemerkt, also hoffe ich, dass meine anekdotischen Beweise helfen.

1

für faule Menschen.

Wenn ich will movieController.view.frame direkt verwenden Ich nenne nur

[movieController.view setTranslatesAutoresizingMaskIntoConstraints:YES]; 

vor

[movieController prepareToPlay]; 
[self.view addSubview:movieController.view]; 

zu verwirren nicht mit Einschränkungen.