2011-01-02 6 views
0

ich folgende Meldungen vor Absturz bin immer:Programmabsturz, braucht Hilfe, das Problem zumindest, was zu finden aussieht

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 

Ich habe versucht, genau auf der Spur, wo das Problem ist, zu testen versucht ' Behalten Sie 'an einigen Stellen, aber etwas Optionen jetzt nicht mehr. Wenn ich versuche, Debugger mit Haltepunkt zu laufen, aber es bleibt hängen und ich kann nicht vorwärts gehen.

Ich würde jede mögliche Hilfe schätzen. Ich bin ziemlich neu in diesem auch, was nicht der Situation :-)

besser macht Hier ist das der Teil des Codes, der Absturz:

Fall 2: // Zwei Spieler

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

Antwort

0

Wir können nicht wissen, was hinter dem Bildschirm geschieht, z.B. hier:

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

aber es könnte sehr gut sein, dass etwas in diesem ErrorMessage Objekt auf ein wenig länger leben sollte.

Um das zu beheben, nicht release, aber autorelease. Nach der Rückkehr zur Runloop wird das Objekt weiterleben, was für Ihre (unbekannten) Zwecke lang genug sein kann.

würde die typische Sequenz dann:

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

(Ich ziehe alloc + init über new, aber sie sind gleichwertig)

+0

Vielen Dank an Sie, das Problem zu sein scheint, bemerkte ich aus diesem funktioniert und es hat funktioniert :-) – PeterK

+0

@PeterK toll, aber kommentieren Sie nicht einfach eine 'Veröffentlichung' aus! Ändern Sie es zumindest in 'Autorelease'. Oder du wirst viel später wegen Speicherlecks hier herkommen, später ... – mvds

0

Sie geben entweder etwas frei, das Sie nicht freigeben sollten, oder Sie behalten kein automatisch freigegebenes Objekt bei, das Sie behalten müssen. Lesen Sie die Dokumente zur Speicherverwaltung. Wir sehen nicht genug von Ihrem Code hier, um zu wissen, was es ist.

+0

Ich bin mir bewusst, dies aber ich kann nicht finden, nur das Problem :-( – PeterK

Verwandte Themen