2012-01-23 2 views
0

Xcode 프로젝트에서 원격 MP3 파일을 재생하려고하는데 아래의 구현은 MPMoviePlayerController를 사용하여 작동하지 않고 예외가 발생합니다.iOS 5에서 HTTP를 통해 원격 MP3 파일 재생

키 값 관찰자가 여전히 인 동안 AVPlayerItem이 할당 해제되었습니다.

내 .H 파일

#import <MediaPlayer/MediaPlayer.h> 

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer; 

당신은 당신의 플레이어에 대한 합성 속성을 지정한

@synthesize moviePlayer = _moviePlayer; 

- (void)playEnglish 
{ 
NSURL *url = [NSURL URLWithString:_audioUrlEnglish]; 
_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(moviePlayBackDidFinish:) 
name:MPMoviePlayerPlaybackDidFinishNotification 
object:_moviePlayer]; 

_moviePlayer.controlStyle = MPMovieControlStyleDefault; 
_moviePlayer.shouldAutoplay = YES; 
[self.view addSubview:_moviePlayer.view]; 
[_moviePlayer setFullscreen:YES animated:YES]; 
} 


- (void) moviePlayBackDidFinish:(NSNotification*)notification { 
MPMoviePlayerController *player = [notification object]; 
[[NSNotificationCenter defaultCenter] 
removeObserver:self 
name:MPMoviePlayerPlaybackDidFinishNotification 
object:player]; 

if ([player 
respondsToSelector:@selector(setFullscreen:animated:)]) 
{ 
[player.view removeFromSuperview]; 
} 
} 

답변

1

내하는 .m 파일,하지만 당신은 다음 직접 할당하고 상아에게. 당신이해야

__moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

: 대신

(당신이 자동 참조 카운팅을 사용하는 경우)

MPMoviePlayer *aPlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
[self setMoviePlayer:aPlayer]; 

이 개체가 제대로 유지되어 있는지 확인합니다. 이 정보가 없으면 플레이어가 보유되지 않고 오류를 설명하는 것으로 보입니다.

또한 코드의 다른 여러 위치에서 인스턴스 변수를 할당/액세스하고 있습니다. Cocoa의 모범 사례는 일반적으로 직접 ivars를 만지는 것을 피합니다 (몇 가지 예외가 있지만 ARC를 사용할 때보다는 훨씬 적습니다. 직접 할당 할 가치가있는 예제는 없습니다).

+0

좋은 답변입니다. 고맙습니다. – Nick