在我的模型类中,我希望在发生不良事件时显示警报(例如,服务器发送错误)。但是,我不想打扰代表或KVO。
是否有一种简单的方法可以显示" main"窗口,将视图置于其他人之上?
目前我使用此代码(如果放在viewController类之外,则不起作用):
UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"Произошла ошибка"
message:response
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:vc animated:YES completion:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[vc dismissViewControllerAnimated:YES completion:nil];
});
}];
显然,没有视图的课程无法使用:
[self presentViewController:vc animated:YES completion:^{
答案 0 :(得分:1)
您需要显示UIAlertController
中的UIViewController
。如果您需要主视图控制器,则需要从应用程序代理的窗口rootViewController
执行此操作。
一种讨厌的方法是引用UIApplication.sharedApplication().delegate.window.rootViewController
更好的方法是发布模型方法的通知并在App Delegate
中监听理想情况下,您应该考虑将模型方法中的错误传递给调用视图控制器。
或许您可以将当前视图控制器作为参数传递给模型方法
答案 1 :(得分:1)
根据@Ashley Mills的解决方案您可以使用此方法找到顶视图控制器
- (UIViewController *)currentTopViewController
{
UIViewController *topVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
while (topVC.presentedViewController)
{
topVC = topVC.presentedViewController;
}
if ([topVC isKindOfClass:[UINavigationController class]]) {
return [(UINavigationController *)topVC topViewController];
}
return topVC;
}
在currentTopViewController
方法