dismissViewControllerAnimated完成方法不起作用

时间:2012-10-26 00:03:12

标签: objective-c ios

这是我的应用设计。我mainController提出了secondViewController。现在,我想解雇secondViewController并随后在aMethod上调用方法mainController,如下所示:

[self dismissViewControllerAnimated:YES completion:aMethod];

但是这给了我错误use of undeclared identifier 'aMethod'

显然我没有正确使用完成处理程序,但我无法弄清楚正确的方法。

3 个答案:

答案 0 :(得分:12)

我认为这就是你要找的东西,

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

在上面的代码中,您需要在块外声明self并将其用作

__block SecondViewController *object = self;

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

只是为了避免self被保留在阻止中。

<强>更新

现在遇到了问题。您需要在mainController的.h文件中将secondViewController声明为属性。之后当您从secondViewController展示maincontroller时,您需要将其设置为,

secondViewController.maincontroller = self;
[self presentViewController:secondViewController animated:YES completion:Nil];

SecondViewController.h文件中,

@property(nonatomic, assign) MainController *mainController;

SecondViewController.m文件中,

@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];
                }];

答案 1 :(得分:1)

你想要这样的东西:

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

答案 2 :(得分:-3)

声明:dismissViewControllerAnimated:YES completion:Nil

我希望它有所帮助。