0

私のアプリには、アクションの後にユーザーが[送信]ボタンを押すたびに、ゲームがそのアクションがGameCenterの実績であるかどうかを確認する機能があります。最近、接続の有無にかかわらず、アプリがクラッシュしている人がいます(すべての異なるiPhoneモデル、iPadモデル、iOSシステム)。クラッシュログから、問題は次のようになります。

Incident Identifier: E44706D0-6B10-44DD-BDB2-EDCD563011DC
CrashReporter Key:   7580fe38161bf461fc45c8e5c4c5ab07747756be
Hardware Model:      iPhone5,2
Process:         APPNAME [1417]
Path:            /var/mobile/Applications/9B7EAD6C9-4A1F-4A46-84DE-762EDED1A1BD/APPNAME.app/APPNA
Identifier:      APPNAME
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2012-11-08 23:40:52.926 -0500
OS Version:      iOS 6.0.1 (10A525)
Report Version:  104

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

Last Exception Backtrace:
0   CoreFoundation                  0x3b3c03e2 0x3b2fe000 + 795618
1   libobjc.A.dylib                 0x3a41995e 0x3a411000 + 35166
2   CoreFoundation                  0x3b3c0302 0x3b2fe000 + 795394
3   CoreFoundation                  0x3b3103e6 0x3b2fe000 + 74726
4   APPNAME                     0x000f9950 -[Gamer updateCurrentAchievements:] (Gamer.m:621)
5   APPNAME                     0x000f9698 -[Gamer checkWord] (Gamer.m:560)
6   APPNAME                     0x000f8d22 -[Gamer ButtonPressed:] (Gamer.m:394)

これは、参照しているコードのブロックです。

-(void) updateCurrentAchievements:(int) achievement_number
{
NSLog(@"Achievement Number is %d",achievement_number);
char ch = [ self.appDelegate.previous_Achieved characterAtIndex:achievement_number-1 ];
if( ch == '0' )
{
    currentAchieved[self.appDelegate.new_Achievements] = achievement_number;
    self.appDelegate.new_Achievements++;
    NSLog(@"new achievements are : %d",self.appDelegate.new_Achievements);
    self.appDelegate.current_Achieved = [self.appDelegate.current_Achieved stringByReplacingCharactersInRange:NSMakeRange((achievement_number-1), 1) withString:@"1"];
        self.appDelegate.previous_Achieved = self.appDelegate.current_Achieved;
        [self.appDelegate checkAchievements:achievement_number];
    }
    NSLog(@"current Achievement string is %@ and length is %d",self.appDelegate.current_Achieved,[self.appDelegate.current_Achieved length]);
}

ここで何が起こっているのでしょうか?任意の洞察をいただければ幸いです。これ以上の情報を提供しなかった場合は申し訳ありませんが、お知らせください。確実に詳細をご記入いただけます。ありがとうございました!

4

1 に答える 1

1

メソッドの開始時にが0の場合achievement_number、次の行が呼び出されたときにSIGABRTが発生します。

self.appDelegate.current_Achieved = [self.appDelegate.current_Achieved stringByReplacingCharactersInRange:NSMakeRange((achievement_number-1), 1) withString:@"1"];

于 2012-11-09T22:27:51.180 に答える