2012-11-09 122 views
0

我的应用程序中有一项功能,每当用户在某个操作后点击“提交”按钮,游戏就会检查该操作是否为Game Center中的成就。最近,该应用程序已经崩溃了几个有和没有连接的人(所有不同的iPhone型号,iPad型号和iOS系统)。从崩溃日志,它看起来像这正是问题所在:在XCode中使用崩溃报告修复iPhone应用程序

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

任何想法可能是怎么回事?任何见解都会被赞赏。如果我没有提供更多信息,我很抱歉,但让我知道,我一定会填补你的空缺。谢谢!

+0

不是真的真的真的不应该把你的AppDelegate如家issue..but到所有的变量。 –

回答

1

如果achievement_number是0开始的方法时,一个SIGABRT时会发生此行被调用:

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

+0

非常感谢。你有任何建议的修复?任何见解都会被赞赏。绝对重视你的意见。 – user1506841

+1

是,只是用“if”语句包围它。如果不知道你的代码应该如何工作,我无法真正提出一个替代的代码片段。当achievement_number为0时会发生什么? –

+0

基本上这里是脚本的用途:当玩家在没有连接到Game Center的情况下完成了一项成就,然后在连接时完成了同一个成就,但该应用在Game Center中不会标记为完整。这是为了检查成就是否在Game Center中。如果不是,请将其标记。这有帮助吗? – user1506841