我的iPhone游戏在设备上崩溃,我试图了解发生了什么。
每次用户退出游戏屏幕时,它都会向HomePageController
(我的顶级控制器)发送消息,告诉它保存用户数据。除了在这个特定的实例中,这一直都可以正常工作。抛出的异常似乎表明HomePageController
无法识别saveUserData
选择器,但我无法看到它是如何发生的,因为该函数肯定在该控制器中,并且它在其余时间工作。 / p>
有人可以提供任何建议吗?
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)
HomePageController.m中的第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
}
答案 0 :(得分:3)
如果currentPuzzle
无法识别选择器getPuzzleUserData
,那么问题就是这两个问题之一:
LevelData
未定义方法getPuzzleUserData
。currentPuzzle
不是LevelData
因此,请检查方法是否在类LevelData
中实际定义,而不是HomePageController
中,并且当您向_puzzles10x10
添加项时,它们实际上是LevelData
的实例。
要进一步调试,请将代码拆分为尽可能多的行(每行一条指令),添加大量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];
}
答案 1 :(得分:0)
从日志中可以清楚地看到,你正在调用一个实际上不存在的对象中的方法。
(2 CoreFoundation 0x3756da9b -[NSObject doesNotRecognizeSelector:] + 175)
我认为'_puzzles10x10'的数据类型会因代码中的错误而更改为其他类型。