如何为 SimplePing 显示警报?
Posted
技术标签:
【中文标题】如何为 SimplePing 显示警报?【英文标题】:How to present an alert for SimplePing? 【发布时间】:2018-05-26 09:26:49 【问题描述】:我有两个 ViewController,一个是 ViewController,另一个是 GlobalViewController。我在 GlobalVC 中实现了 SimplePing 来检查网络连接。它工作正常,但我想在“没有互联网”时显示警报。
这是我的代码,
//In ViewController.m
- (void)viewDidAppear:(BOOL)animated
//Calling SimplePing 'start' function
[_gc checkNetConnection];
//In GlobalVC
#pragma mark - SimplePingDelegate
- (void)simplePing:(SimplePing *)pinger didFailWithError:(NSError *)error
NSLog(@"didFailWithError: %@", [error description]);
NSLog(@"#####%@", error.localizedDescription);
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"No internet connection, please check it..." preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) ];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:cancel];
[alert addAction:ok];
dispatch_async(dispatch_get_main_queue(), ^
[self presentViewController:alert animated:YES completion:nil];
);
我收到了这个错误,
Warning: Attempt to present <UIAlertController: 0x146045800> on <GlobalViewController: 0x145e0e510> whose view is not in the window hierarchy!
其实在这里我想发送我当前的 ViewController 来显示警报,但我不知道如何发送。
谁能告诉我用 Swift 或 Objective c 回答。
【问题讨论】:
【参考方案1】:这是因为您的 GlobalViewController 的视图当前不在窗口中。当您导航到 ViewController 时,它已被替换。
如果您想在互联网不可用时在每个其他视图控制器中显示您的警报,您应该将警报定义为 UIViewController 上的一个类别,然后在您想要显示它时调用它。
类似这样的:
选择您的项目,然后按“Cmd + n”添加新文件。选择 Objective-C 文件
输入文件名并保存。
输入您的代码:
UIViewController+SimplePing.h
@interface UIViewController (SimplePing)
- (void)simplePing:(SimplePing *)pinger didFailWithError:(NSError *)error;
@end
UIViewController+SimplePing.m
@implementation UIViewController (SimplePing)
- (void)simplePing:(SimplePing *)pinger didFailWithError:(NSError *)error
NSLog(@"didFailWithError: %@", [error description]);
NSLog(@"#####%@", error.localizedDescription);
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"No internet connection, please check it..." preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) ];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:cancel];
[alert addAction:ok];
dispatch_async(dispatch_get_main_queue(), ^
[self presentViewController:alert animated:YES completion:nil];
);
@end
现在您可以从任何视图控制器调用它。
【讨论】:
你能告诉我如何创建 UIViewController+SimplePing.h/.m 文件 当然。选择您的项目,按 cmd+n 添加新文件。在 ios 菜单中选择“Objective-C 文件”。接下来在文件类型中选择“类别”,在类中选择“UIViewController”并输入文件名。 @iOS 我已经更新了答案以说明如何添加类别。 @HAK,它没有显示警报...遇到同样的问题。非常感谢您的回答。 @iOS 在 viewDidAppear 中这样呈现:[self alert];以上是关于如何为 SimplePing 显示警报?的主要内容,如果未能解决你的问题,请参考以下文章
如何为mesos和HAProxy进程编写prometheus警报规则。?