当我触摸特定按钮时,我的应用程序崩溃了

时间:2011-03-30 20:32:59

标签: iphone uibutton avaudioplayer

这是我按钮的标题。

IBOutlet UIButton *buttonOneOne;

}

- (IBAction)buttonOneOne:(id)sender; 

@property (nonatomic, retain)   IBOutlet UIButton       *buttonOneOne;

这是我在我的.m文件中添加的内容

- (IBAction)buttonOneOne:(id)sender {

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"95" ofType:@".wav"];

NSError *activationError = nil;
NSError *audioPlayerInitError = nil;
[[AVAudioSession sharedInstance] setActive: YES error:&activationError];

NSURL *newURL = [NSURL fileURLWithPath:soundFilePath];
AVAudioPlayer *musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:newURL error:&audioPlayerInitError];

[musicPlayer prepareToPlay];
[musicPlayer setVolume:.8];
[musicPlayer setNumberOfLoops:-1]; // -1 means play indefintely
[musicPlayer setDelegate: self];
[musicPlayer play];

}

为什么会崩溃?

2 个答案:

答案 0 :(得分:1)

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'表示无法找到您引用的文件。

指定文件扩展名时不应使用点。

更改ofType:@".wav"
ofType:@"wav"

NSBundle Class Reference

答案 1 :(得分:0)

你应该发布一些控制台输出(可能是一个堆栈跟踪),它会帮助我们更多。

我可以从此代码中看到崩溃的可能原因:

  1. 在为synthesize取代{+ 1}}之后,您的按钮是@property了吗?

  2. 您的Xcode项目中是否存在95.wav(您导入了它)吗?

  3. 您使用的是Interface Builder吗?如果是这样,请检查您的IB项目中的旧IBOutlets和IBActions,因为一旦重命名了一个函数或诸如此类的东西,您必然会得到指向旧代码的接口元素。