2

我有一个导航控制器,它包含一个带有一些按钮的视图,但是当我按下一个按钮时,我得到一个 EXC_BAD_ACCESS 错误。我想不出我做错了什么,因为目标是正确的。无论按钮是通过编程方式添加还是通过 IB 添加,它都会崩溃。

按钮代码:

UIButton *reportsButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
reportsButton.frame = CGRectMake(20, 100, 100, 50);
[reportsButton setTitle:@"Reports" forState:UIControlStateNormal];
[reportsButton addTarget:self action:@selector(reportsButtonTouched:) forControlEvents:UIControlEventTouchUpInside];

功能按钮正在尝试访问:

- (void)reportsButtonTouched:(id)sender
{
    NSLog(@"working");
}

错误:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); //EXC_BAD_ACCESS code=1
}

按钮尝试访问的功能存在。

也许这与我不知道的 NavigationController 的运行方式有关,但我之前已经这样做了,没有任何问题。

感谢您的任何回答,我非常感谢我之前从该站点获得的帮助。

编辑:这是我的 AppDelegates didFinishLaunching 以防万一。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    UIViewController *homevc = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:homevc];

    [self.window addSubview:nav.view];
    [self.window makeKeyAndVisible];
    return YES;
}
4

2 回答 2

4

您的代码中似乎没有任何问题指向任何问题。使用本教程使 Xcode 中断所有异常。这将使您更接近“犯罪现场”,而不是坠入主线。

于 2012-04-11T15:38:01.447 回答
1

我也遇到了这个错误;我一直在使用 SpriteKit 编程并以某种方式实现我的按钮,然后当我回到不使用框架时,突然之间,我实现的每个按钮都导致了错误的访问错误。

我发现我在 viewDidLoad 中初始化了我的按钮,因为我一直在使用 didMoveToView,并且我不小心将它们视为相同的函数(老实说,我并没有真正掌握 viewDidLoad 的实际作用)。

但是当我这样做时:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // Custom initialization
    [self addButton];

}
return self;
}


- (void)addButton
{
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 45, 45)];

[button setTitle:@"CLICK" forState:UIControlStateNormal];


[button addTarget:self action:@selector(buttonPressed:) 
forControlEvents:UIControlEventTouchDown];

[self.view addSubview:button];
}

- (void)buttonPressed:(UIButton *)button
{
    NSLog(@"WORKED"); 
}

一切都很好......所以尝试一下,如果你仍然有麻烦。祝你好运!

于 2013-09-23T13:56:14.540 回答