2012-05-07 10 views
1

でデフォルトを打った後、私はこの単純なswitch文があります。値はデフォルトのケースに当たるEXC BADアクセスswitch文

switch ([sender tag]) { 
    case 0: 
     [NVAlertView showNVAlertViewFromView:self.view 
             title:@"STOCK NUMBER" 
           description:@"XXXXXXXXXXX" 
           cancelTitle:@"Cancel" 
            otherTitle:@"DONE" 
           dismissBlock:^(BOOL canceled, NSString *description) { 
            if (!canceled) { 
             [newItem setObject:description forKey:@"stocknum"]; 
            } 
           }]; 
     NSLog(@"YOP!"); 
     break; 

    case kDescription: 
     [NVAlertView showNVAlertViewFromView:self.view 
             title:@"DESCRIPTION" 
           description:@"Enter a description here." 
           cancelTitle:@"Cancel" 
            otherTitle:@"DONE" 
           dismissBlock:^(BOOL canceled, NSString *description) { 
            if (!canceled) { 
             [newItem setObject:description forKey:@"description"]; 
            } 
           }]; 
     break; 

    case kBrandName: 
     [NVAlertView showNVAlertViewFromView:self.view 
             title:@"BRAND NAME" 
           description:@"Enter a brand name here." 
           cancelTitle:@"Cancel" 
            otherTitle:@"DONE" 
           dismissBlock:^(BOOL canceled, NSString *description) { 
            if (!canceled) { 
             [newItem setObject:description forKey:@"description"]; 
            } 
           }]; 
     break; 

    case kPrice: 
     [NVAlertView showNVAlertViewFromView:self.view 
             title:@"PRICE" 
           description:@"$199.99" 
           cancelTitle:@"Cancel" 
            otherTitle:@"DONE" 
           dismissBlock:^(BOOL canceled, NSString *description) { 
            if (!canceled) { 
             [newItem setObject:description forKey:@"description"]; 
            } 
           }]; 
     break; 

    default: 
     NSLog(@"default"); 
     break; 
} 

毎回、それが「デフォルト」と理由EXC BADアクセスのプログラムがクラッシュを出力します。これは何の原因ですか? ありがとう!

+0

switch文の後に続くコードはありますか?説明から、問題がスイッチの後に続くかのように聞こえます。 –

+0

switch文の後には何もありません。関数は終了します。スイッチがそこにある唯一のステートメントです – 0xSina

+0

EXEC BAD ACCESSは、しばしば早すぎるリリース/ダングリングポインターです。スニペットの範囲には何もないので、このメソッドの前後にエラーが導入されている可能性があります。スイッチの終了は実行サイクルの最後のコードになる可能性があります。そのため、デフォルトのケースの直後にエラーが表示されるのはその原因ではありません。 – isaac

答えて

0

ブロック内の値を設定するnewItemの範囲は何ですか?

却下ブロックが呼び出されるまでに範囲外になっている可能性があります。アラートビューが表示され、入力を待っていますが、コードは実行を継続してswitch文(およびメソッド、

ブロック内で直接操作を実行する代わりに、newItemを作成してその値を設定し、その特定のメソッドをdismissBlockから呼び出す別のメソッドを設定することができます。

2

EXC_BAD_ACCESSは、すでに割り当てが解除されたオブジェクトにアクセスすることによって発生することがよくあります。

このスイッチブロックの後の行のオブジェクトをチェックして、保持カウント> 0であることを確認します。送信者もチェックします。

+0

+1正しいアイデア。より一般的には、無効なポインタを使用することによって発生します。割り当て解除されたオブジェクトにアクセスするか、最初に初期化されていないポインタを使用するか、またはメモリの一部を読み書きして、それらのいずれかを取得できます。 – Caleb