Представленный UIViewController не может представить UIAlertController

Когда в моем приложении нажимается кнопка отправки, SubmitViewController отображается над активным контроллером представления для отображения хода загрузки.

Когда получено уведомление об ошибке, оно должно отобразить предупреждение с ошибкой и закрыться.

Проблема в том, что предупреждение не отображается, потому что self.navigationController равно nil. Как я могу представить оповещение в этом случае?

Я не могу использовать раскадровку для создания экземпляра SubmitViewController, как некоторые могут предположить, поскольку это не часть раскадровки.

Контроллер представления, используемый для представления SubmitViewController:

-(void)submitBtnClicked:(id)sender {
    SubmitViewController *submitViewController = [SubmitViewController new];
    [self.navigationController presentViewController:submitViewController animated:YES completion:nil];
}

SubmitViewController.swift:

@objc func submitErrorNotification(_ notification:Notification) {
    self.unsubscribe()

    let title:String = notification.userInfo!["title"] as! String
    let message:String = notification.userInfo!["message"] as! String

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
    alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))

    if (self.navigationController == nil) {
        NSLog("Error: navigation controller is nil");// THIS error occurs
    }

    self.navigationController?.present(alertController, animated: false, completion: nil)

    self.dismiss(animated: false, completion: nil)
}

comment
Почему вы хотите представить контроллер предупреждений на навигационном контроллере? Почему бы вам просто не представить его в своем экземпляре SubmitViewController и не отклонить его в обработчике действий?   -  person Paulw11    schedule 02.10.2018
comment
@Paulw11Paulw11, теперь я иду к решению. Мне нужно представить его на контроллере навигации, чтобы я мог отключить базовый контроллер представления и заменить его другим контроллером представления.   -  person Peter G.    schedule 02.10.2018
comment
Тогда вам, вероятно, следует использовать шаблон делегирования, чтобы контроллер представления представления мог сообщить делегату, что произошла ошибка, и делегат может решить, что делать.   -  person Paulw11    schedule 02.10.2018


Ответы (1)


Почему вы используете ключевое слово предупреждения в:

[self.navigationController presentViewController:alert animated:YES completion:nil];

Попробуй это :

SubmitViewController *myViewController = [SubmitViewController new];
    [self.navigationController presentViewController:myViewController animated:YES completion:nil];
person Mahesh Shahane    schedule 02.10.2018
comment
Просто по ошибке, ничего общего с проблемой. - person Peter G.; 02.10.2018