2012-03-18 5 views
0

私のiPhoneゲームがデバイス上でクラッシュしたが、何が起こったのかを理解しようとしている。iPhoneのクラッシュログを理解する

ユーザがゲーム画面を終了するたびに、ユーザデータを保存するように指示するメッセージ(HomePageController(最上位コントローラ))にメッセージが送信されます。これは、この特定のインスタンスを除いて常にうまく動作します。スローされた例外は、HomePageControllersaveUserDataセレクタを認識していないことを示していますが、その機能がそのコントローラに確実に存在し、それが残りの時間にどのように起こるかはわかりません。

誰でもアドバイスをいただけますか? HomePageController.mで

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Last Exception Backtrace: 
0 CoreFoundation  0x3756a88f __exceptionPreprocess + 163 
1 libobjc.A.dylib  0x35a70259 objc_exception_throw + 33 
2 CoreFoundation  0x3756da9b -[NSObject doesNotRecognizeSelector:] + 175 
3 CoreFoundation  0x3756c915 ___forwarding___ + 301 
4 CoreFoundation  0x374c7650 _CF_forwarding_prep_0 + 48 
5 P------k   0x0000ebe1 -[HomePageController saveUserData] (HomePageController.m:125) 
6 P------k   0x00008a0b -[RootViewController viewDidAppear:] (RootViewController.m:102) 

線125:

- (void)saveUserData{ 
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                    NSUserDomainMask, YES) objectAtIndex:0]; 
    //10x10 
    { 
     NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelease]; 
     for (int i = 0; i < _puzzles10x10.count; i++){ 
      LevelData *currentPuzzle = [_puzzles10x10 objectAtIndex:i]; 
      /*(line 125)*/ [dict setObject:[currentPuzzle getPuzzleUserData] forKey:currentPuzzle.title]; 
     } 

     [dict writeToFile:[documentsPath stringByAppendingPathComponent:@"userdata.dat"] atomically:YES]; 
    } 
    // more here 
} 
+2

HomePageController.mファイルに125行目を投稿できますか?私はあなたがそこにあなたの答えを見つけるだろうと思う – giorashc

+0

@giorashcああ、それは今明らかであるように...病気は、まだその行にクラッシュする理由を完全にはっきりしない質問を更新 – Chris

+2

RootViewControllerの行102も興味深いだろう=) –

答えて

3

currentPuzzleセレクタgetPuzzleUserDataを認識しない場合、問題は、これら2つのいずれかである:

  1. LevelData定義されていません方法getPuzzleUserData。この方法は、実際にクラスLevelDataではなくHomePageControllerに、あなたが_puzzles10x10に項目を追加するとき、彼らは実際にLevelDataのインスタンスであると定義されている場合
  2. currentPuzzleLevelData

のインスタンスではありませんので、ご確認ください。 、さらにデバッグできるだけ多くの行(1行につき1つの命令)にコードを分割し、NSLog呼び出しの多くを追加し、何が起こるかを確認するに

NSLog(@"_puzzles10x10: %@", _puzzles10x10); 
for (int i = 0; i < _puzzles10x10.count; i++){ 
    LevelData *currentPuzzle = [_puzzles10x10 objectAtIndex:i]; 
    NSLog(@"currentPuzzle#%d: %@", i, currentPuzzle); 
    UserData *userData = [currentPuzzle getPuzzleUserData]; // change UserData to the correct t class 
    NSLog(@"userData#%d: %@", i, userData); 
    NSString *key = currentPuzzle.title; 
    NSLog(@"key#%d: %@", i, key); 
    [dict setObject:userData forKey:key]; 
} 
+0

ありがとうLevelDataは 'getPuzzleUserData'に確実に応答します。ユーザー保存コードは何ヶ月も変わっていません。一度だけこれが起こったのを見ました。 – Chris

+0

すべてが出力されます。これは私がこのクラッシュが起きたのを初めて見たときです。私は出力の選択を表示することができますが、それは私が期待していたのとまったく同じです。 – Chris

+0

クラッシュを再現できない場合は、それをデバッグするのは難しいです:)クラッシュするまでログを保存してください。 – sch

0

それをログからは、そのあなたの明確です実際には存在しなかったオブジェクト内のメソッドを呼び出しています。

(2 CoreFoundation  0x3756da9b -[NSObject doesNotRecognizeSelector:] + 175) 

私は「_puzzles10x10」のデータ型はコードの間違いをすることによって他のいくつかのタイプに変更されると思います。

+0

コードが行125に進んでいないと、クラッシュの原因になると思います。いいえ? – sch

+0

私は考えられるクラッシュがint(int i = 0; i <_puzzles10x10.count; i ++)の行であると思います。 – rakeshNS

関連する問題