2012-09-17 11 views
43

私のアプリでこのクラッシュが発生する理由を理解しようとしています。iOS6のUIAlertViewのEXC_BAD_ACCESSコード2

それはios5.1にシミュレータで実行中のXcode 4.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を与えています

アイデア?

ありがとうございました!

答えて

126

私はそれを持っています。 私は同じ問題を抱えているのですが、私の場合は、このメソッドがバックグラウンドから投げられているようです(現在はios7で、ios6ではUIAlertViewがメインスレッドに自動的に入れられています)。

メソッドがメインスレッドから示されていることを保証しよう:

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

幸運を!

+4

素敵なデバッグスキル:

//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]; } 

正しい方法は何ですか!確かに働いた –

+3

私はちょうどこのクラッシュは、ユーザーが家に帰って戻ってきた場合は、アプリケーションが起動されたときに発生することを追加したい、アラートビューのショーはクラッシュする結果になります。 performSelectorOnMainThreadを実行すると、Evaの提案通りに修正されます。 – Tommy

+0

素晴らしい!これは私を助け、私の問題を解決しました! – Patrik

0

私は2014年でさえ起こっています。 問題はすでにリリースされているオブジェクトを使用することです。私が間違っていた何

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

viewDidLoad{ 
    B = [[B alloc] init]; 
    [B showAlert]; 
} 
関連する問題