web-dev-qa-db-ja.com

iOS6のUIAlertViewのEXC_BAD_ACCESSコード2

アプリでこのクラッシュが発生する理由を理解しようとしています。

Ios5.1を搭載したシミュレータで実行されているXcode4.4では完全に正常に動作しますが、xcode 4.5とios6に切り替えると、EXC_BAD_ACCESSコード2が表示されます。コードは次のとおりです。

- (void) myMethod
{
    UIAlertView *alertview = [[[UIAlertView alloc]initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease];
    alertview.tag = 1
    [alertview show];
}

これにより、[UIAlertView show]行にEXC_BAD_ACCESSコード2が表示されます。

何か案は?

ありがとう!

43
Sean Danzeiser

私はそれを持っている。私も同じ問題を抱えています。私の場合、メソッドはバックグラウンドからスローされているようです(現在、ios7では、@ nodepondが-thanks!-と言うように、iOS6ではUIAlertViewが自動的にメインスレッドに配置されました)。

メソッドがメインスレッドから表示されることを確認してください。

[alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];

幸運を!

127
Eva Madrazo

それは2014年でも私に起こりました。問題はすでにリリースされたオブジェクトを使いたいということです。

私が間違ったこと:

//class B with UIAletViewDelegate

-(void) showAlert{
 UIAlertView * alert = [[UIAlertView alloc] initWithTitle bla bla...];
 [alert show];
}


//class A
viewDidLoad{
 MyClassB *B = [[B alloc] init];
 [B showAlert];
}

正しい方法は何ですか:

//Class A
@implementation A{
    ClassB *B;
}

 viewDidLoad{
     B = [[B alloc] init];
     [B showAlert];
 }
0
orafaelreis