Не могу полностью отключить мой предыдущий alertcontroller

Я пытаюсь использовать один единственный контроллер предупреждений, который включает в себя несколько предупреждений, показывающих функции и одну функцию увольнения. Но у меня есть это предупреждение в моем консоль и мое другое предупреждение не показывают. Интересно, почему? и решение для этого.

Вот мой контроллер предупреждений

import UIKit

class MyAlertViewController: UIViewController {

var myAlertController : UIAlertController!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func displayLoadingAlert(viewController: UIViewController?) -> UIAlertController {

    var controllerToPresent = viewController
    if controllerToPresent == nil {
        controllerToPresent = self
    }

    //create an alert controller
    myAlertController = UIAlertController(title: "Loading...", message: "We are receiving data,please wait", preferredStyle: .ActionSheet)

    controllerToPresent!.presentViewController(myAlertController, animated: true, completion: nil)

    return myAlertController
}

func connectionErrorAlert(viewController: UIViewController?) -> UIAlertController {

    var controllerToPresent = viewController
    if controllerToPresent == nil {
        controllerToPresent = self
    }

    //create an alert controller
    myAlertController = UIAlertController(title: "Not Connected", message: "No internet Connection", preferredStyle: .Alert)
    let defaultAction = UIAlertAction(title: "OK", style: .Default,handler:nil)
    myAlertController.addAction(defaultAction)

    controllerToPresent!.presentViewController(myAlertController, animated: true, completion: nil)

    return myAlertController
}

func requestTimeOutErrorAlert(viewController: UIViewController?) -> UIAlertController {

    var controllerToPresent = viewController
    if controllerToPresent == nil {
        controllerToPresent = self
    }

    //create an alert controller
    myAlertController = UIAlertController(title: "Request Time Out", message: "Please Click Retry", preferredStyle: .Alert)
    let defaultAction = UIAlertAction(title: "OK", style: .Default,handler:nil)
    myAlertController.addAction(defaultAction)

    controllerToPresent!.presentViewController(myAlertController, animated: true, completion: nil)

    return myAlertController
}

func dismissLoadingAlert(){
    myAlertController.dismissViewControllerAnimated(true, completion: nil)
}

}

Я использую dismissLoadingAlert(), когда получаю результаты от API. Но когда я не получаю результаты от API.i, используемые для этого метода делегата из моего протокола.

func didNotReceiveAPIResults(results: Bool,error:NSError){
    dispatch_async(dispatch_get_main_queue(), {
        // This condition will be enter if we dont get the results and show user with alert.
        if (results) {
            // I have done dismiss first data receiving alert,what do i doing wrong?
            self.myAlertController.dismissLoadingAlert()
            if error.localizedDescription == "The Internet connection appears to be offline."{
                self.myAlertController.connectionErrorAlert(self)
                self.carTableView.hidden=true
                self.retryButton?.hidden=false
                self.retryButton?.enabled=true
            }
            if error.localizedDescription == "Request Time Out."{
                self.myAlertController.requestTimeOutErrorAlert(self)
                self.carTableView.hidden=true
                self.retryButton?.hidden=false
                self.retryButton?.enabled=true
            }

        }else{
            self.myAlertController.displayLoadingAlert(self)
            self.retryButton?.hidden=true
            self.retryButton?.enabled=false
            self.carTableView.hidden=false
            self.carTableView.reloadData()
        }
    })
}

Ответ 1

Вы ошиблись. Вы не должны подклассифицировать этот контроллер.

Класс UIAlertController предназначен для использования как есть и не поддерживает подклассы. Иерархия представления для этого класса является частной и не должна быть изменена.

Если вам нужен класс удобства, рефакторинг с подклассом NSObject, который представляет динамические экземпляры UIAlertController.