presentViewController:animated:completion:导致我的程序崩溃

时间:2014-10-25 17:12:05

标签: ios objective-c xcode ios7

我有一个RootViewController,它使用实例方法presentViewController呈现FirstViewController:animated:completion:。我在方法中有一条日志消息(“呈现”);它看起来所以我知道我的root在我的FirstViewController中被调用,但由于某种原因,消息会在程序崩溃之前连续记录。

RootViewController的

-(void)presentViewController:(UIViewController *)viewControllerToPresent
                  animated:(BOOL)flag
              completion:(void (^)(void))completion {

     NSLog(@"Presenting");

    [self presentViewController:viewControllerToPresent animated:flag completion:completion];
}

FirstViewController(我调用该方法)

-(void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:YES];

    MyRootController *root = [[MyRootController alloc] init];
    [root presentViewController:self animated:YES completion:nil];
    NSLog(@"asdhflkajshdfl %@...", [self presentingViewController]);

}

我不确定如何才能让方法只执行一次。这是我第一次使用该方法,但我认为该消息只会被记录一次。

1 个答案:

答案 0 :(得分:1)

我怀疑你想知道,当调用presentViewController...时(编辑:...,因为只有日志调用和对其中相同方法的调用)。您可能还想调用超类方法,因此需要使用super而不是self

-(void)presentViewController:(UIViewController *)viewControllerToPresent
                  animated:(BOOL)flag
              completion:(void (^)(void))completion {

     NSLog(@"Presenting");
    // Note super here:
    [super presentViewController:viewControllerToPresent animated:flag completion:completion];
}

在原始代码中,您从内部调用相同的方法。这导致了许多日志消息。