Je me rends compte qu'une question similaire a déjà été postée, mais je n'arrive vraiment pas à trouver une solution qui fonctionne pour moi. J'ai une classe MoviePlayer qui stocke un Ivar de MPMoviePlayerController, et je la méthode suivante dans la classe:MPMoviePlayerController jouera une fois, puis enverra une erreur
-(void)playMovie:(NSString *)movieName
{
NSURL *movieURL;
NSBundle *bundle = [NSBundle mainBundle];
if(bundle)
{
NSString *moviePath = [bundle pathForResource:movieName ofType:@"m4v"];
if(moviePath)
{
movieURL = [NSURL fileURLWithPath:moviePath];
}
}
MPMovieController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
if(mp)
{
self.moviePlayer = mp;
[mp release];
[self.moviePlayer play];
}
[movieURL release];
}
Quand appel que je joue film une fois que le film joue bien, mais quand il est appelé à nouveau sur un autre (ou le même) film fichier je reçois la pile d'erreur suivante:
_class_isInitialized
_class_lookupMethodAndLoadCache objc_msgSend
-[MoviePlayer setMoviePlayer:]
-[MoviePlayer playMovie:]
Je ne sais pas comment y remédier! J'ai supposé que quand self.moviePlayer = mp est appelé alors le moviePlayer actuel est libéré et le nouveau est ajouté? La propriété est définie sur (nonatomic, retain). Quelqu'un peut-il aider s'il vous plaît?
Merci
Hey, merci pour la réponse. J'ai essayé votre suggestion et j'obtiens une pile d'erreurs avec la méthode NSPopAutoreleasePool> [MPMoviePlayer Controller dealloc]. Je n'ai jamais libéré le MPMoviePlayerController dans mon code, j'ai parcouru chaque ligne juste pour le vérifier. Les MPMoviePlayerControllers sont-ils automatiquement ajoutés au pool? –
Si vous avez la pile, alors vous devriez voir où le lecteur de film a été libéré (j'espère). Non, vous avez utilisé init, il est donc de votre responsabilité de le libérer (gestion de la mémoire cacao). Vous devrez effectuer un suivi lorsque vous relâchez le lecteur. Vous pouvez également créer une catégorie pour MPMoviePlayer, puis implémenter la méthode de publication. Placez un point d'arrêt dans cette méthode et découvrez quand il est appelé. –