AVAudioPlayer正在播放崩溃的应用程序

时间:2010-10-04 19:23:15

标签: objective-c xcode ipad ios4

我正在使用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 )

处崩溃

1 个答案:

答案 0 :(得分:2)

您指向在列出的第一行中为AVAudioPlayer实例分配的空间,但实际上并未初始化实例。在Cocoa中,“alloc”是99.9%的时间,后跟某种形式的-init(如-initWithContentsOfURL:错误:在AVAudioPlayer的情况下)。

此外,“soundClass”是实例变量的奇怪名称。您应该了解一个类(对象的蓝图)和一个类的实例(从蓝图构建的实际对象)之间的区别。熟悉这一概念对于理解Cocoa(以及所有面向对象的)编程至关重要。