1

我目前正在做具有图形功能的计算器应用程序。那么,我的计算器中有这个按钮,并将它连接到我的 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. 转场现在有效。但是,我的控制台上有这个通知(有点吓人)

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>.
4

2 回答 2

5

graphPressed并且graphPressed:是不同的方法。一个有参数参数,另一个没有。您已将其实现为:

-(IBAction)graphPressed

但是您可能已在标头中将函数声明为:

-(IBAction)graphPressed:(id)sender

它(正确地)将其视为两个完全独立的功能。现在,您实际上可以在没有任何参数 ( ) 或使用参数 ( ) 的情况下声明和实现它,但重要的是它在声明和实现中是一致的。声明和实现必须相同。-(IBAction)graphPressed-(IBAction)graphPressed:(id)sender

只是一个提示,最好总是将 IBActions 声明为,-(IBAction)myButtonWasPressed:(id)sender因为这可以让您知道按下了哪个按钮(通过sender参数),并且它允许您拥有多个触发相同事件的按钮,并且仍然能够分辨哪个是按下。

于 2012-06-18T03:20:51.283 回答
3

看看错误中的选择器如何有一个冒号?看起来是一样的方法,其实不太一样……graphPressed需要用参数声明

- (IBAction)graphPressed:(id)sender
于 2012-06-18T03:20:15.997 回答