私はAVAudioPlayer
を利用するために呼び出すクラスを持っていますが、オーディオを再生するにはすべてうまく動作しますが、-audioPlayerDidFinishPlaying:
と呼ばれるときに私のNSLog()
コマンドはプレーヤーが解放されたことを示します。問題は、後でアプリケーションがクラッシュすることです。私はaudioPlayer
がこのクラスの象牙であることを言及する必要があります。ここでは、コードは次のとおりです。audioPlayerDidFinishPlayingの後のEXC_BAD_ACCESS:
-(id) initWithFileName:(NSString *)sndFileName
{
[super init];
sndFileToPlay = [[NSString alloc] initWithString:sndFileName];
return self;
}
-(void)dealloc {
[audioPlayer release];
self.audioPlayer.delegate = nil;
self.audioPlayer = nil;
[super dealloc];
}
-(void)play
{
[self playSound:sndFileToPlay];
}
-(void)playSound:(NSString *)fileName
{
NSString *fname, *ext;
NSRange range = [fileName rangeOfString:@"."];
int location = range.location;
if(location > 0)
{
fname = [fileName substringWithRange:NSMakeRange(0, location)];
ext = [fileName substringFromIndex:location+1];
[self playSound:fname :ext];
}
}
-
-(void)playSound:(NSString *)fileName :(NSString *)fileExt
{
NSBundle *mainBundle = [NSBundle mainBundle];
NSURL *fileURL = [NSURL fileURLWithPath:
[mainBundle pathForResource:fileName ofType:fileExt] isDirectory:NO];
if (fileURL != nil)
{
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
error: nil];
[fileURL release];
[audioPlayer setDelegate:self];
[audioPlayer play];
}
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player
successfully:(BOOL)flag
{
NSLog(@"Releasing");
[audioPlayer release];
}
質問を編集してフォーマットを修正してください。ありがとう。 – DarkDust