我有一个名为UIViewController
的{{1}}子类,它有一个从按钮操作调用的完成块属性。控制器已设置并显示在另一个视图控制器中,如下所示:
NewsViewController
在iOS 10中,这一切都运行正常,但在iOS 9中,视图并未被忽略。如果我在那里设置一个断点就会受到打击。
我尝试了以下但没有成功:
从主线程调用(同步和异步)
我已经尝试过使用这样的GCD:
newsViewController.completionBlock = ^{
[self dismissViewControllerAnimated:YES completion:nil];
};
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController];
[self presentViewController:navigationController animated:YES completion:nil];
我也通过将解雇调用放入方法然后调用
来尝试它dispatch_async(dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];
});
我实际上并不认为问题是线程,因为在完成块内调用[self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO];
会返回YES。
延迟致电
[NSThread isMainThread]
在另一个视图控制器上调用dismiss
我尝试在[self performSelector:@selector(dismissModalView) withObject:nil afterDelay:0.1];
,navigationController
和self.presentedViewController
上调用它。
直接从NewsViewController调用解雇
在调用完成块的按钮操作中,我直接调用self.presentingViewController
。
顺便说一下。只是为了好玩,我尝试从[self dismissViewControllerAnimated:YES completion:nil]
方法的完成块中调用dismiss方法,并且它确实被解雇了。
答案 0 :(得分:0)
尝试使用以下代码:
newsViewController.completionBlock = ^{
[self performSelector:@selector(Dismiss) withObject:nil afterDelay:0.3];
};
-(void)Dismiss
{
[self dismissViewControllerAnimated:YES completion:^{
}];
}
答案 1 :(得分:0)
我终于找到了问题,这是非常意外的。问题是NewsViewController
显示在我的登录视图控制器上。此控制器允许用户使用Touch ID登录,以便在其viewDidAppear
方法中请求Touch ID提示。显然,这会解散所呈现的视图,而且似乎只在iOS 9中出现(好吧,也许不仅仅是,但它似乎在iOS 10中运行良好)。