私は自分のゲームにシンプルなスコアシステムを作成しようとしています。辞書を使用し、NSUserDefaultsを使用して保存し、プレーヤーのスコアを保存しています。ただし、新しいスコアを既存のキー/値に設定しようとすると、アプリがクラッシュし、コンソールログメッセージが表示されず、xcodeがアセンブラーコードで読み取れなくなります。例外を設定し、どの行で呼び出されたかを示すため、どこでクラッシュするかがわかります。それが何かを変えるなら、私もcocos2dを使います。
コードは次のとおりです。
//creates key for the right level
NSString *currentLevelString = [NSString stringWithFormat:@"Level%i",numberOfCurentLevel];
//checking if dictionary is empty, if empty then it means the game is played for the first time
NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc]init]autorelease];
//ud is the UserDefaults
dictionary = [ud objectForKey:@"dictionaryWithScores"];
if ([dictionary objectForKey:@"Level5"] == nil) {
//assigning first values for empty dictionary
dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"ScoreList" ofType:@"plist"]];
NSLog(@"dictionary was empty");
}
//NSLog(@"now dictionary shoud not be empty %@",dictionary);
//calculating current score for this level
double currentScore = (numberOfCurentLevel * elementsFound)/9.0;///timeInSeconds;
double previousScore = [[dictionary objectForKey:currentLevelString]doubleValue];//taking previous score for thi level
NSLog(@"currentScore: %f \n previousScore: %f",currentScore,previousScore);
//checking whether current score is greater than the previous one
if (currentScore > previousScore)
{
NSLog(@"dictionary just before the crash: %@",dictionary);
//if new score is greater then update the dictionary
NSString *currentScoreString = [NSString stringWithFormat:@"%f",currentScore];
//it crashes on this line seObject
[dictionary setObject:currentScoreString forKey:currentLevelString];
[ud setObject:dictionary forKey:@"dictionaryWithScores"];
[ud synchronize];
//calculating total score (score for each level + next one)
double overallScore = 0;
for (int i=1; i <= 101; i++) {
//adding scores for each level to each other
overallScore = overallScore + [[dictionary objectForKey:[NSString stringWithFormat:@"Level%i",i]]doubleValue];
// NSLog(@"overal score: %f",overallScore);
}
setObject行にコメントすると、すべてが正常に機能します。クラッシュの原因となるものがあれば誰でもできますか?前もって感謝します。