2015-12-29 6 views
0

Я пишу метод для использования данных из веб-сервиса. Я написал этот метод внутри класса (общий класс), поэтому я могу использовать этот класс в любом viewController для использования данных. Внутри этого метода я проверяю подключение к Интернету. Если произошел сбой, я хочу отобразить предупреждение с описанием ошибки. Это мой код внутри моего метода:Как я могу отобразить UIAlertController внутри моего класса NSObject в iOS 9?

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_async(queue, ^{ 

     mainSession = [NSURLSession sharedSession]; 
     mainDataTask = [mainSession dataTaskWithRequest:MainRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

      if (error) { 
       UIAlertController *alertOne = [UIAlertController alertControllerWithTitle:@"Something Wrong!" message:[error description] preferredStyle:UIAlertControllerStyleAlert]; 
       // I want to show alert here 
      } 
     }]; 

    }); 

Этот метод относится к моему общему классу (NSObject). Если что-то не так с соединением, внутри этого блока я хочу показать ошибку. Как я могу это сделать?

+0

Вы используете этот код? и что такое проблема в коде выше? что будет выводить код? пожалуйста, сообщите мне или обновите свой вопрос – Birendra

+0

внутри вашего класса NSObject, у вас нет viewController, поэтому вы можете показать там предупреждение, либо вернуть alertView, либо показать его в VC, либо использовать расширение UIWindow для получения текущего VC, а затем показать его там – Tj3n

ответ

0

#import <UIKit/UIKit.h> в вашем NSObject Класс

, то вы можете использовать UIAlertController.

UIAlertController *alertController=[UIAlertController alertControllerWithTitle:@"Title" message:nil preferredStyle:UIAlertControllerStyleAlert]; 
//... 
id rootViewController=[UIApplication sharedApplication].delegate.window.rootViewController; 
if([rootViewController isKindOfClass:[UINavigationController class]]) 
{ 
    rootViewController=[((UINavigationController *)rootViewController).viewControllers objectAtIndex:0]; 
} 
[rootViewController presentViewController:alertController animated:YES completion:nil]; 
+0

Я сделал это, и я хочу показать предупреждение. – Jobs

0

ли ваше объявление AlertController в основной очереди, как этот

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_async(queue, ^{ 

     mainSession = [NSURLSession sharedSession]; 
     mainDataTask = [mainSession dataTaskWithRequest:MainRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

      if (error) { 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        UIAlertController *alertOne = [UIAlertController alertControllerWithTitle:@"Something Wrong!" message:[error description] preferredStyle:UIAlertControllerStyleAlert]; 
        // I want to show alert here 
       }); 
      } 
     }]; 

    }); 
0

Используйте следующий код. Я надеюсь, что это будет полезно для вас

метод // Вызов

 [self showMessage:@"There is no internet connection for this device" 
      withTitle:@"Error"]; 

// Написать метод, как

#pragma mark 
#pragma mark -- UIAlertView Method 
-(void)showMessage:(NSString*)message withTitle:(NSString *)title{ 
dispatch_async(dispatch_get_main_queue(), ^{ 
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; 
    [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 

    }]]; 

    [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:alertController animated:YES completion:^{ 
    }]; 
}); 
} 
0

Как представить встревоженной View Использование UIAlertController Если Вы не имеете Контроллер просмотра. Description.

Да, вы можете использовать только UIAlertController только в классах UIViewController. Итак, как мы можем это сделать в классах NSObject. Если вы видите ссылку описания, приведенную выше, вы получите ответ. Подводя итог в строке для вышеприведенного описания: создайте новое окно над текущим окном. Это новое окно будет нашим viewController, где мы будем показывать предупреждение. Таким образом, используя этот viewController, вы можете вызвать метод [presentViewController: animated: completion:].

dispatch_async(dispatch_get_main_queue(), ^{ 

        UIWindow* window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

        window.rootViewController = [UIViewController new]; 

        window.windowLevel = UIWindowLevelAlert + 1; 



        NSString *[email protected]“Your mssg"; 

        UIAlertController* alertCtrl = [UIAlertController alertControllerWithTitle:@“Title" message:msg preferredStyle:UIAlertControllerStyleAlert]; 



        [alertCtrl addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Yes",@"Generic confirm") style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { 

         // do your stuff 

         // very important to hide the window afterwards. 


         window.hidden = YES; 

        }]]; 

        UIAlertAction *cancelAction= [UIAlertAction actionWithTitle:@"cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 

         window.hidden = YES; 

        }]; 

        [alertCtrl addAction:cancelAction]; 

        //http://stackoverflow.com/questions/25260290/makekeywindow-vs-makekeyandvisible 

        [window makeKeyAndVisible]; //The makeKeyAndVisible message makes a window key, and moves it to be in front of any other windows on its level 

        [window.rootViewController presentViewController:alertCtrl animated:YES completion:nil]; 

       }); 
0

Используйте данный код, чтобы представить UIAlertController из класса NSObject.

[[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:alertViewController animated:true completion:nil];