当我不投票时会发生什么?

时间:2013-01-03 05:51:43

标签: objective-c

我遇到了一个错误,我很难重新创建。我认为这与我没有投射物体的事实有关,但我不是百分之百确定。

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中发生错误。

2 个答案:

答案 0 :(得分:2)

不,施法与问题无关。你得到一个例外的原因是有时索引2处的对象是错误的类型。错误不会持续发生的事实是一个额外的线索:当游戏控制器在第二个索引时寻找解决此问题的情况。

通常,强制转换有助于告诉编译器有关对象类型的更多信息。鉴于Objective C的动态特性,这比C ++中重要得多。

答案 1 :(得分:0)

  

我认为这与我没有投射物体的事实有关,但我不是百分之百确定。

没有。转换只是为了欺骗编译器(在这种特殊情况下),对象的实际类是在运行时确定的。发生异常是因为您的对象没有实现它发送的方法,因为它不是预期的类。