我最近在我的 iOS 应用程序中遇到了一个令人毛骨悚然的情况,我试图连续关闭UIViewController
从我的窗口的 rootViewController 呈现的一个,使用:
[rootViewController dismissViewControllerAnimated:YES completion:NULL]
并在此后不久呈现另一个(顺便说一句,以另一种方法),其中:
UIViewController *vc2 = [[[MyViewController2 alloc] initWithNibName:nil bundle:nil] autorelease];
[rootViewController presentViewController:vc2 animated:YES completion:NULL];
问题是,我永远无法让第二个视图控制器出现。事实证明,据我所知,dismissViewControllerAnimated:completion:
需要通过“完成”时间的异步块,然后presentViewController:animated:completion:
才能再次正常工作。据我所知,这一事实并未直接记录在Apple 的文档中。
我想出的解决方案是用一个方法来包装解雇,该方法指定您以后要调用的选择器,如下所示:
- (void)dismissViewController:(UIViewController *)presentingController
postAction:(SEL)postDismissalAction
{
[presentingController dismissViewControllerAnimated:YES
completion:^{
[self performSelectorOnMainThread:postDismissalAction
withObject:nil
waitUntilDone:NO];
}];
}
然后我会打电话:
[self dismissViewController:self.window.rootViewController
postAction:@selector(methodForNextModalPresentation)];
无论如何,我想发帖,因为我环顾四周并没有看到有人遇到这个特殊问题,所以我认为它可能有助于人们理解。而且,我想验证我没有破解具有更好解决方案设计模式的解决方案。