我遇到了一个错误,我很难重新创建。我认为这与我没有投射物体的事实有关,但我不是百分之百确定。
UINavigationController *navController = [self navigationController];
MainGameViewController *controller = [navController.viewControllers objectAtIndex:2];
controller.phase = @"READY";
我知道objectAtIndex:2将始终返回一个MainGameViewController类型的对象,但是它不是被转换的事实是不一致错误的来源吗?错误发生在我提供的第3行。
这是跟踪:
0 CoreFoundation 0x3a6703e2 __exceptionPreprocess + 158
1 libobjc.A.dylib 0x394fc95e objc_exception_throw + 26
2 CoreFoundation 0x3a673f2c -[NSObject(NSObject) doesNotRecognizeSelector:] + 180
3 CoreFoundation 0x3a672648 ___forwarding___ + 388
4 CoreFoundation 0x3a5ca204 _CF_forwarding_prep_0 + 20
5 AppName 0x0003af56 -[ResultViewController BackToMainGameView] (ResultViewController.m:286)
类ResultsViewController中发生错误。
答案 0 :(得分:2)
不,施法与问题无关。你得到一个例外的原因是有时索引2处的对象是错误的类型。错误不会持续发生的事实是一个额外的线索:当游戏控制器不在第二个索引时寻找解决此问题的情况。
通常,强制转换有助于告诉编译器有关对象类型的更多信息。鉴于Objective C的动态特性,这比C ++中重要得多。
答案 1 :(得分:0)
我认为这与我没有投射物体的事实有关,但我不是百分之百确定。
没有。转换只是为了欺骗编译器(在这种特殊情况下),对象的实际类是在运行时确定的。发生异常是因为您的对象没有实现它发送的方法,因为它不是预期的类。