我正在使用AVAudioPlayer管理一些声音,但isPlaying方法似乎崩溃了。
在我启动页面时完成:
self.soundClass = [AVAudioPlayer alloc];
我如何播放声音:
-(void)playSound:(NSString *)fileName:(NSString *)fileExt {
if ( [self.soundClass isPlaying] ){
[self.soundClass pause];
}
else if (newSoundFile == currentSoundFile) {
[self.soundClass play];
}
else {
NSLog(@"PlaySound with two variable passed function");
[[NSBundle mainBundle] pathForResource: fileName ofType:fileExt]], &systemSoundID);
[self.soundClass initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource: fileName ofType:fileExt]] error:nil];
[self.soundClass prepareToPlay];
[self.soundClass play];
}
self.currentSoundFile = fileName;
}
我的soundClass现在很空:
soundclass.h
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
#import<AVFoundation/AVFoundation.h>
@interface SoundClass : AVAudioPlayer <AVAudioPlayerDelegate> {
}
@end
SoundClass.m
#import "SoundClass.h"
@implementation SoundClass
-(void)dealloc {
[super dealloc];
}
@end
你在这里看到的任何东西我可能做错了吗?它在if ( isPlaying )
答案 0 :(得分:2)
您指向在列出的第一行中为AVAudioPlayer实例分配的空间,但实际上并未初始化实例。在Cocoa中,“alloc”是99.9%的时间,后跟某种形式的-init(如-initWithContentsOfURL:错误:在AVAudioPlayer的情况下)。
此外,“soundClass”是实例变量的奇怪名称。您应该了解一个类(对象的蓝图)和一个类的实例(从蓝图构建的实际对象)之间的区别。熟悉这一概念对于理解Cocoa(以及所有面向对象的)编程至关重要。