Как сделать оповещение для SimplePing? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть два ViewController, один - ViewController, а другой - GlobalViewController.Я реализовал SimplePing в GlobalVC для проверки сетевого соединения.Он работает нормально, но я хочу показать предупреждение, когда «нет интернета».

Это мой код,

//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 Ответ

0 голосов
/ 26 мая 2018

Это происходит из-за того, что представление вашего GlobalViewController в данный момент отсутствует в окне.Он был заменен при переходе к ViewController.

Если вы хотите показывать свое предупреждение в любом другом viewcontroller, когда интернет недоступен, вы должны определить это предупреждение как категорию на UIViewController и затем вызывать его всякий раз, когда захотитечтобы отобразить его.

Примерно так:

Выберите проект и нажмите «Cmd + n», чтобы добавить новый файл.Выберите файл Objective-C

new file

Введите имя файла и сохраните.

enter image description here

Введите свой код:

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

Теперь вы можете вызывать его с любого вашего viewcontroller.

...