警告:正在进行演示或解除时尝试从视图控制器(UINavigationController)中解除

时间:2013-07-16 18:02:13

标签: objective-c cocoa-touch uiviewcontroller nsnotification

我有2个视图控制器。 FirstViewControllerSecondViewController。第二个是通过presentViewController...

呈现的

两人都在收听通知:

FirstViewController.m

- (void)facebookUpdated:(NSNotification *)notification {

    if (![[FacebookHelper sharedInstance] isLoggedIn]) {

        [self.addReminderTableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 2)] withRowAnimation:UITableViewRowAnimationFade];

    }
}

SecondViewController.m

- (void)facebookUpdated:(NSNotification *)notification {

    if (![[FacebookHelper sharedInstance] isLoggedIn]) {

        // The user decided not to log in

        [self dismissViewControllerAnimated:YES completion:^{

        }];
    }
}

SecondViewController被取消,FirstViewController中的表格被重新加载。但我收到了这个我不喜欢的警告

  

警告:尝试从视图控制器中解除    而陈述或解雇是   正在进行中!

我真的不确定为什么我会得到它。我确信没有其他解雇正在进行中。我不确定进行中的演示是什么意思?

1 个答案:

答案 0 :(得分:0)

如果SecondViewController在动画播放之前通过调用(void)facebookUpdated:(NSNotification *)notification而被解除,以使其显示在首位,则会发生此警告。

你可以:

  1. 忽略警告
  2. 如果它可能立即被解散,则不要通过动画显示SecondViewController来避免它。
  3. 通过在初始视图控制器动画上设置回调来避免它,同时在第二个视图控制器上调用函数告诉它动画已完成。然后,您可以在调用(void)facebookUpdated:(NSNotification *)notification之前在dismissViewControllerAnimated中检查此属性,如果加载尚未完成,请设置另一个标志以使原始动画回调函数调用dismissViewControllerAnimated(这可能是最正确的解决方案,但也是最复杂的解决方案。)