我目前正在做具有图形功能的计算器应用程序。因此,我的计算器中有此按钮,并将其连接到Calculator2ViewController上。另外,我将此按钮连接到另一个名为GraphViewController的UIViewController,并将segue的标识符命名为showGraph
。以下是我的segue的代码。
- (GraphViewController *)graphViewController {
return [self.splitViewController.viewControllers lastObject];
}
- (IBAction)graphPressed {
if ([self graphViewController]) {
[[self graphViewController] setProgram:self.brain.program];
}
else {
[self performSegueWithIdentifier:@"showGraph" sender:self];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[segue.destinationViewController setProgram:self.brain.program];
}
在那里,因此没有错误和警告。但是,当我尝试运行该应用程序并按
Graph
按钮时,该应用程序崩溃并在我的控制台上获取了它。2012-06-18 11:08:17.272 Calculator2[1135:f803] -[Calculator2ViewController graphPressed:]: unrecognized selector sent to instance 0x6c38850
2012-06-18 11:08:17.273 Calculator2[1135:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Calculator2ViewController graphPressed:]: unrecognized selector sent to instance 0x6c38850'
请告诉我为什么会发生这种情况,以及如何以更好的方式做到这一点。谢谢!
编辑:
将
- (IBAction)graphPressed
更改为- (IBAction)graphPressed:(id)sender
。该segue现在工作。但是,我在控制台上收到了此通知(这有点吓人)2012-06-18 11:30:02.955 Calculator2[1260:f803] nested push animation can result in corrupted navigation bar
2012-06-18 11:30:03.308 Calculator2[1260:f803] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-06-18 11:30:03.309 Calculator2[1260:f803] Unbalanced calls to begin/end appearance transitions for <GraphViewController: 0x6e458d0>.
最佳答案
graphPressed
和graphPressed:
是不同的方法。一个具有自变量参数,另一个没有。您已将其实现为:
-(IBAction)graphPressed
但是您可能已经在标头中将函数声明为:
-(IBAction)graphPressed:(id)sender
它(正确地)将其视为两个完全独立的功能。现在,您实际上可以在没有任何参数(
-(IBAction)graphPressed
)或有参数(-(IBAction)graphPressed:(id)sender
)的情况下声明和实现它,但是重要的是,它在声明和实现中都与保持一致。声明和实现必须相同。只是一个提示,最好的方法是始终将IBActions声明为
-(IBAction)myButtonWasPressed:(id)sender
,因为这可以让您知道按下了哪个按钮(通过sender
参数),并且它允许您有多个按钮来触发同一事件,并且仍然能够分辨被按下。