1

現在、グラフ機能を備えた電卓アプリをやっています。それで、私は電卓にこのボタンを持っていて、それを電卓2ViewControllerに配線しました。また、このボタンをGraphViewControllerという名前の別のUIViewControllerに配線し、セグエの識別子に。という名前を付けましたshowGraph。以下は私のセグエのコードです。

- (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

graphPressedgraphPressed:は別の方法です。1つには引数パラメーターがあり、もう1つにはありません。次のように実装しました。

-(IBAction)graphPressed

ただし、ヘッダーで関数を次のように宣言している可能性があります。

-(IBAction)graphPressed:(id)sender

これは(当然のことながら)2つの完全に別個の機能と見なされます。これで、実際にはパラメーターなし()またはパラメーター付き()で宣言および実装できますが、重要なのは、宣言と実装の両方で一貫していることです。宣言と実装は同じでなければなりません。-(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 に答える