程序收到信号:“EXC_BAD_ACCESS”

时间:2011-04-18 10:19:57

标签: ios exc-bad-access

我已经查看过这样的其他问题,但无法找到帮助。当我按下应该发出声音的按钮时,应用程序崩溃了。这是调试控制台:

  

调试器退出状态为0.
      [会议开始于2011-04-18 18:07:56 +0800。]
      GNU gdb 6.3.50-20050815(Apple版gdb-1515)(2011年1月15日星期六08:33:48 UTC)       版权所有2004 Free Software Foundation,Inc。
      GDB是免费软件,由GNU通用公共许可证涵盖,您是       欢迎在特定条件下更改和/或分发副本       输入“显示复制”以查看条件       GDB完全没有保修。输入“show warranty”了解详情       此GDB配置为“x86_64-apple-darwin”.sharedlibrary apply-load-rules all       附加到过程3814.
      程序收到信号:“EXC_BAD_ACCESS”。
      (gdb)

那是调试器控制台。

这是我的编码:

AppDelegate.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>


@interface MathAppDelegate : NSObject <UIApplicationDelegate> {
    AVAudioPlayer* sound;
    UIWindow *window;
    UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

-(IBAction)play;

@end

AppDelegate.m

#import "MathAppDelegate.h"
#import "MainMenuViewController.h"

@implementation MathAppDelegate
@synthesize window;

-(IBAction)play {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"M1" ofType:@"aif"];
    AVAudioPlayer *sound = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:path] error:NULL];
    sound.delegate = self;    ("I get an error here saying 'Local declaration of 'sound' hides instance variable") and ("Class 'MathAppDelegate' does not implement the AVAudioPlayerDelegate' protocol")
    [sound play];  ("I get an error here saying 'Local declaration of 'sound' hides instance variable'")
}

我已将按钮连接到Interface Builder中的操作。是什么让我觉得这搞砸了我必须将app委托对象从mainwindow.xib拖到mainmenuviewcontroller.xib,因为那是我需要放置按钮的地方。它仍然连接。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是让您的按钮操作指向同一XIB中对象中可用的操作。因此,您可能希望将主菜单控制器中的播放操作挂钩到文件的所有者,在这种情况下可能是您的MainMenuViewController对象。我只是将播放动作和相关代码移动到该文件。

应用程序委托是MainWindow.xib中的对象控制器,并配置为同一文件中窗口的委托。由于您将其移动到另一个xib,因此窗口的委托现在指向一个不存在的对象。这可能解释了崩溃。

答案 1 :(得分:0)

编程接收信号:“EXC_BAD_ACCESS”。

database1AppDelegate *appDelegate = (database1AppDelegate*)[[UIApplication sharedApplication]delegate];
singleStudent *sStudent = [appDelegate.aryDatabase objectAtIndex:indexPath.row];
cell.textLabel.text = [sStudent strName];