Вы создали подкласс UIViewController
под названием my_view_error
. Метод UIViewController
presentViewController
ожидает, что на момент вызова метода будет отображаться self
(a my_view_error
).
Ваша функция my_error
прекрасна, но ее следует перенести в контроллер просмотра, который фактически находится на экране. Нет необходимости создавать UIViewController
только для того, чтобы представить UIAlertController
. Фактически, UIAlertController
является a UIViewController
и не нуждается в помощи от пользовательского контроллера.
Как и любой контроллер вида, контроллер представления, представляющий предупреждение, должен быть на экране, чтобы выполнить презентацию.
Каждый контроллер вида может иметь свой собственный файл .swift
. Однако нет необходимости создавать его для UIAlertController
.
Heres версия функции, которая использует rootViewController
на UIApplication
, чтобы получить вид контроллер в данный момент на экране, а затем использует это представить ваше предупреждение:
func my_error(my_title: String, my_message: String) {
let alertController = UIAlertController(title: my_title, message: my_message, preferredStyle: .Alert)
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in }
alertController.addAction(OKAction)
// Uses UIApplication.sharedApplication().keyWindow!.rootViewController! instead of self
UIApplication.sharedApplication().keyWindow!.rootViewController!.presentViewController(alertController, animated: true) {}
}
Ok, спасибо за вашу информацию, поэтому я переместил мою функцию «my_error» на мой view_controller, это работает, но если я хочу вызвать эту функцию в другом файле, функция не распознается «использование неразрешенного идентификатора« my_error », мне нужно создать второй ViewController? – Guillaume
@Guillaume Нет, если вы пытаетесь вызвать 'my_error' из другого класса, тогда вам нужно будет получить экземпляр вашего контроллера представления, чтобы вызвать метод. –
Я добавляю ed версия вашего метода, которая будет использовать текущий контроллер экрана. –