2

いくつかのボタンを含むビューを保持するnavigationControllerがありますが、ボタンを押すと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を使用してプログラミングし、ボタンを特定の方法で実装していましたが、フレームワークを使用しないように戻ると、突然、実装したすべてのボタンが不正なアクセスエラーを引き起こしていました。

私はdidMoveToViewを使用していたため、viewDidLoadでボタンを初期化していることがわかり、誤って同じ関数として扱っていました(正直なところ、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 に答える