2012-01-24 13 views
0

EKEventEditViewControllerで完了ボタンをクリックすると、アプリケーションが "exc_bad_access"というクラッシュを起こします。それを検出するためにブレークポイントを使用しましたが、見つけられません。 gdbのクラッシュについては何もありません。どこでクラッシュをチェックすべきですか? Done-buttonはコントロールをEKEventEditViewDelegate - メソッドにシフトしません。それはちょうどクラッシュです。私をPLZから助けてください。EKEventEditViewControllerでクラッシュを検出できません

は、ここに私のコードです

-(void)viewWillAppear:(BOOL)animated 
{ 

EKEventEditViewController *addController = [[EKEventEditViewController alloc] 
initWithNibName:nil bundle:nil]; 
addController.eventStore = self.eventStore; 
addController.event = event; 
addController.editViewDelegate = self; 
[self presentModalViewController:addController animated:YES]; 
[super viewWillAppear:YES]; 

} 

#pragma mark - 
#pragma mark EKEventEditViewDelegate 

- (void)eventEditViewController:(EKEventEditViewController *)controller 
     didCompleteWithAction:(EKEventEditViewAction)action { 

NSError *error = nil; 
EKEvent *thisEvent = controller.event; 

switch (action) { 

     case EKEventEditViewActionCanceled:  
     break; 

    case EKEventEditViewActionSaved: 
      [controller.eventStore saveEvent:controller.event 
        span:EKSpanThisEvent error:&error]; 
     break; 

    case EKEventEditViewActionDeleted: 
     [controller.eventStore removeEvent:thisEvent span:EKSpanThisEvent 
        error:&error]; 
     break; 

    default: 
     break; 
} 

[controller dismissModalViewControllerAnimated:YES]; 
[self backTopreviousController]; 
} 

-(void)backTopreviousController 
{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

答えて

0

デバッグプログラムeventEditViewController:didCompleteWithActionの先頭にブレークポイントを設定した後。プログラムがブレークポイントに達すると、ステップバイステップで実行します。このようにすること

、あなたはどちらか知っています:

声明もそのメソッドに入る前に、プログラムがクラッシュしたことをプログラムをクラッシュさせ、または

    1. を。

    ケース1では、メッセージを送信する各オブジェクトを検査し、割り当てが解除されていないことを確認する必要があります。ケース2では、完了ボタンに関連付けられているアクション定義を調べる必要があります。

  • 1

    exc_bad_accessは、割り当て解除されたメモリ(おそらくメモリ管理の問題)にアクセスしていることを示しています。これらの問題は、あなたがある時点でオブジェクトをリリースする可能性があり、このオブジェクトにアクセスするときに問題に遭遇するだけなので、取り組むのが少し難しいです。

    あなたは次のことを試すことができます。

    1. あなたもZombies
    2. を選択することができますここで、「楽器」が開きますProfile
    3. プログラムを選択リストから「ファイル名を指定して実行ボタンのドロップダウン」
    4. をクリックしますこれであなたのアプリとやり取りしてエラーを起こすことができます
    5. エラーが発生するとすぐに、あなたのオブジェクトがリリースされたときのヒントが得られるはずです以前は割り当てが解除されました。

    Zombies http://www.dimzzy.com/blog/wp-content/uploads/2011/02/leaky-zombies-tool.png

    +0

    私は100%確信していませんが、彼はまずNSZombiesを有効にする必要があると思います。 (Edit Scheme - > Diagnostics、そしてZombie ObjectsとMalloc Stackを有効にする)また、彼はシミュレータでのみこれを使うことができます! – BBog

    +0

    私はあなたがそれを有効にする必要はないと思います。私は間違っているかもしれませんが、私の理解には、ゾンビのモードを選択するとゾンビのオブジェクトをオンザフライで有効にする必要があります。 – Besi

    +0

    私が言ったように、私は完全にはわかりません。とにかく、彼がそれらを可能にすれば、彼はその器具を使う必要なしに問題の原因を見つけることができるかもしれません。スキームにNSZombiesEnabledを設定すると、アプリがクラッシュした正確な行も表示されます。それは私が通常やっていることです。私が行った正確な問題を正確に特定できず、Instrumentsを使用することができないときだけです。私はむしろそのツールから離れて、xcodeは十分な量のラムを食べるだろう。> – BBog

    0

    あなたのコードは、次の理由の行でクラッシュしています。

    [controller dismissModalViewControllerAnimated:YES]; 
    [self backTopreviousController]; 
    

    あなたはポップまたはディスカードしたいですか?しかし、両方ではありません。 このクラスの呼び出し方法によって異なります。プッシュまたはプレゼントモーダル!

    関連する問題