2012-10-26 16 views
5

私のアプリのデザインです。私はmainControllerを持っています。これはsecondViewControllerです。今、私はsecondViewControllerを却下し、その後そのようmainControllerにメソッドaMethodを呼び出したい:dismissViewControllerAnimated完了メソッドが動作しない

[self dismissViewControllerAnimated:YES completion:aMethod]; 

しかし、これは明らかに私にエラーuse of undeclared identifier 'aMethod'

を与える私が正しく完了ハンドラを使用していないが、私は理解できません正しい方向に出てください。私はそれが役に立てば幸いdismissViewControllerAnimated:YES completion:Nil

答えて

12

、あなたはブロックの外側selfを宣言して、それを使用する必要があります上記のコードで

[self dismissViewControllerAnimated:YES completion:^{ 
      [self.mainController aMethod]; 
     }]; 

を、

__block SecondViewController *object = self; 

[self dismissViewControllerAnimated:YES completion:^{ 
       [object.mainController aMethod]; 
      }]; 

ブロックしないようにしてください。self

更新:

今の問題を得ました。 secondViewControllerの.hファイルのプロパティとしてmainControllerを宣言する必要があります。あなたはmaincontrollerからsecondViewControllerを提示された場合、その後、あなたのようにそれを設定する必要があり、あなたのSecondViewController.mファイルで

secondViewController.maincontroller = self; 
[self presentViewController:secondViewController animated:YES completion:Nil]; 
あなた SecondViewController.hファイルで

@property(nonatomic, assign) MainController *mainController; 

@synthesis mainController; 

アップデート2:

maincontrollerをプロパティとして宣言しない場合は、これを試してください。これが正しい方法かどうかはわかりません。しかし、それは働いていたように見えます。

MainController *mainController = (MainController *)[self.view.superview nextResponder]; 

    [self dismissViewControllerAnimated:YES completion:^{ 
        [mainController aMethod]; 
       }]; 

アップデート3(推奨):

これはあなたのために働く必要があります。それを確認してください。

MainController *mainController = (MainController *)self.parentViewController; 

    [self dismissViewControllerAnimated:YES completion:^{ 
        [mainController aMethod]; 
       }]; 
+0

まあ、 '__block YouViewController * object = self'を実行していないのですが、私はオブジェクトを設定して、却下されているviewControllerにしていますか?提示されたものではありませんか? –

+0

ああ、ちょうどあなたの更新を見ました。オブジェクトがmainControllerを持っていないと、それが何であるかを知ることができません。 –

+0

これをチェックして、これが動作するかどうか教えてください。 – iDev

-3

はこのことを宣言します。

+0

いいえ、それは役に立ちません。私が完了した後に表示されるviewController上のメソッドを呼び出そうとしています...したがって、完了の私の使用 –

1

あなたが何かしたい:私はあなたが探しているこの何を考えて

[self dismissViewControllerAnimated:YES completion:^{ 
      ... 
      <do something on completion here> 
      ... 
     }]; 
+0

同じエラー...どのコントローラがメソッドを完了で受け取りますか? –

+0

方法とは? – EarlyRiser

+0

これは 'mainController'で宣言されたメソッドで、dismissviewcontrolleranimated –

関連する問題