2011-01-02 8 views
0

を見に問題を見つけるために助けが必要:プログラムのクラッシュ、私がクラッシュする前に、次のメッセージを取得しています少なくとも

2011-01-02 00:55:15.935 XXXX[7981:207] answerButton1  
2011-01-02 00:55:15.938 XXXX[7981:207] >>>>>>>>>>>>>>>>>>>>nrQPlayer: 2 
2011-01-02 00:55:15.939 XXXX[7981:207] =========whatPlayerCount=========== 
2011-01-02 00:55:15.939 XXXX[7981:207] ==whatPlayerCount== 1 
2011-01-02 00:55:15.940 XXXX[7981:207] =========Spelare 1=========== 
2011-01-02 00:55:15.940 XXXX[7981:207] oooooooEND OF PLAYER!oooooooooo 
2011-01-02 00:55:15.941 XXXX[7981:207] ooooooooooBEFORE IFooooooooooo 
2011-01-02 00:55:15.942 XXXX[7981:207] INIT 0x5b9be30 
2011-01-02 00:55:16.563 XXXX to be able to fix it[7981:207] *** -[ErrorMessage respondsToSelector:]: message sent to deallocated instance 0xca25ff0 

私は場所を正確に問題を追跡しようとしている、「テストしようとしていますいくつかの場所では保持していますが、現在はオプションが多少不足しています。私はブレークポイントでデバッガを実行しようとするが、それは立ち往生し、私は前進することはできません。

可能な限りお手伝いします。

ケース2:私はここに

:-)状況を改善することクラッシュコードの一部ですしない、また、この時にはかなり新しいです// 2人のプレイヤー

 //nrQPlayer antal spelare 
     NSLog(@"=========whatPlayerCount==========="); 
     NSLog(@"==whatPlayerCount== %i", whatPlayerCount); 
     switch (whatPlayerCount) { 
      case 1: 
       NSLog(@"=========Spelare 1==========="); 
       playerDiff = 1; 
       whatPlayerCount = 2; 
       thePlayer = 0; 
       NSLog(@"oooooooEND OF PLAYER!oooooooooo"); 
       break; 
      case 2: 
       NSLog(@"=========Spelare 2==========="); 
       playerDiff = 3; 
       whatPlayerCount = 1; 
       thePlayer = 2; 
       break; 
      default: 
       NSLog(@"=========break==========="); 
       break; 
     } 
     NSLog(@"ooooooooooBEFORE IFooooooooooo"); 
     NSLog(@"INIT %p", self); 
     // >>>>>>>>HERE IS WHERE THE CRASH HAPPENS<<<<<<<<<< 
     if (askedQuestions < nrOfQuestionsPerPlayer) { 
      NSLog(@"1"); 
      if ([[finalPlayersInGame objectAtIndex:playerDiff] intValue] == 1) { // HARD 
       NSLog(@"HARD 1"); 
       questionNr = [[hardQArray objectAtIndex:askedQuestions] intValue]; 
       qArray = [readQuestionFunction readQuestion: questionNr]; 
       question_TextView.text = [qArray objectAtIndex:0]; 
       NSLog(@"HARD - qNr: %i", questionNr); 
      } 
      else if ([[finalPlayersInGame objectAtIndex:playerDiff] intValue] == 2) { // MEDIUM 
       NSLog(@"2"); 
       questionNr = [[mediumQArray objectAtIndex:askedQuestions] intValue]; 
       qArray = [readQuestionFunction readQuestion: questionNr]; 
       question_TextView.text = [qArray objectAtIndex:0]; 
       NSLog(@"MEDIUM - qNr: %i", questionNr); 
      } 
      else if ([[finalPlayersInGame objectAtIndex:playerDiff] intValue] == 3) { // EASY 
       NSLog(@"3"); 
       questionNr = [[easyQArray objectAtIndex:askedQuestions] intValue]; 
       qArray = [readQuestionFunction readQuestion: questionNr]; 
       NSLog(@"qArray: %@", qArray); 
       NSLog(@"questionNr: %i", questionNr); 
       question_TextView.text = [qArray objectAtIndex:0]; 
       NSLog(@"EASY - qNr: %i", questionNr); 
      } 
      NSLog(@"ooooooooooAFTER IFooooooooooo"); 

      NSLog(@"4"); 
      playerName_Label.text = [NSString stringWithFormat:@"Spelare: %@", [finalPlayersInGame objectAtIndex:thePlayer]]; 
      playerResult_Label.text = [NSString stringWithFormat:@"Fråga %i av %i", askedQuestions, nrOfQuestionsPerPlayer]; 

      //========CALL AccesQuestionDB MODULE TO SHUFFLE PLAYERS=========// 
      AccessQuestionsDB *shufflePlayersFunction = [AccessQuestionsDB new]; 

      buttonOrder = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 

      buttonOrder = [shufflePlayersFunction shufflePlayers: buttonOrder]; // Use shufflePlayers to shuffle button also 
      NSLog(@"buttonOrder: %@", buttonOrder); 
      [shufflePlayersFunction release]; 
      NSLog(@"5"); 
      //========CALL buttonsOrder=========// 
      ButtonOrderAccess *buttonOrderFunction = [ButtonOrderAccess new]; 
      [buttonOrderFunction saveButtonOrder: buttonOrder]; 
      [buttonOrderFunction release]; 

      NSLog(@"qArray: %@", qArray); 
      NSLog(@"buttonOrder: %@", buttonOrder); 
      [self.answerButton1 setTitle:[qArray objectAtIndex:[[buttonOrder objectAtIndex:0]intValue]] forState:UIControlStateNormal]; 
      [self.answerButton2 setTitle:[qArray objectAtIndex:[[buttonOrder objectAtIndex:1]intValue]] forState:UIControlStateNormal]; 
      [self.answerButton3 setTitle:[qArray objectAtIndex:[[buttonOrder objectAtIndex:2]intValue]] forState:UIControlStateNormal]; 


      if (firstQuestion == YES) { 
       firstQuestion = NO; 
       //secondQuestion = YES; 
      } 
      else { 
       askedQuestions++; 
       firstQuestion = YES; 
      } 



     } 
     else { 
      // Call Error Message 
      ErrorMessage *callErrorMessageFunction = [ErrorMessage new]; 
      [callErrorMessageFunction questionError: @"Q2"]; 
      [callErrorMessageFunction release]; 
     } 

答えて

0

画面の後ろに何が起こっているのかわかりません。ここに:

ErrorMessage *callErrorMessageFunction = [ErrorMessage new]; 
[callErrorMessageFunction questionError: @"Q2"]; 
[callErrorMessageFunction release]; 

が、それは非常によく、このErrorMessageオブジェクトで何かが少し長い上で生きなければならないことかもしれません。

これを修正するには、releaseではなく、autoreleaseとしてください。ランループに戻ると、オブジェクトは存続しますが、これはあなたの(不明な)目的に十分に長くなる可能性があります。

典型的なシーケンスは次のようになります。

ErrorMessage *callErrorMessageFunction = [[[ErrorMessage alloc] init] autorelease]; 
[callErrorMessageFunction questionError: @"Q2"]; 

(私はnewalloc + initを好むが、彼らは同じです)

+0

:-(あなたにBIGおかげで、問題を見つけるカント、これが問題のようです私はこれらをコメントアウト機能とそれは働いた:-) – PeterK

+0

@ PeterK素晴らしい、しかし、単に 'リリース'をコメントしないでください!少なくともそれを 'autorelease'に変更してください。それとも、メモリリークのためにここに戻って来るでしょう... – mvds

0

あなたが放つべきではないものをリリースしているか、周りに残しておく必要のある自動リリースされたオブジェクトを保持していません。メモリ管理文書を読んでください。それがどれであるかを知るためにあなたのコードをここで十分に見ていません。

+0

を、私はこのことを認識していますが、私はちょうど – PeterK

1

使用NSZombie、割り当て解除オブジェクトや印刷物に送信されたメッセージをキャッチオブジェクトコンソールの情報

詳細な手順については、この質問を参照してください。 How to run iPhone program with Zombies instrument?