0
if (mPlayerItem){
[mPlayerItem removeObserver:self forKeyPath:kStatusKey];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AVPlayerItemDidPlayToEndTimeNotification
object:mPlayerItem];
}
//create AVPlayerItem
NSURL *url = [self getUrlWithROAudio:audioFile];
mPlayerItem = [AVPlayerItem playerItemWithURL:url];
[mPlayerItem addObserver:self
forKeyPath:kStatusKey
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
context:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:mPlayerItem];
나는 새로운 AVPlayerItem을 만들 때 마지막이 존재하고, removeObserver 하지만 난
가 가지고 있다면, 내가 확인합니다 - [AVPlayerItem removeObserver : forKeyPath :] : 메시지 할당이 해제 된 인스턴스로 전송AVPlayerItem removeObserver : 오류를 얻을 forKeyPath
누구나 아는 이유는 무엇입니까?
mPlayerItem이 nil이거나 출시되지 않은 경우 if (mPlayerItem)? – icefox
removemPlayerItem의 Observer를 삭제하고 동일한 keypath에 대해 새 객체를 추가하면. 괜찮 니? – icefox
'mPlayerItem'에 의해 가리켜지는 객체가 해제되면, 그것은 여전히이 예외를 야기하는 nil 검사를 통과 할 것입니다. 이것은 수동 참조 카운트 관리의 일종입니다. – warrenm