Создание экземпляра UIViewController без раскадровки или файла xib

Я искал способ создать экземпляр пользовательского класса UIViewController, который не привязан к раскадровке или файлу xib.

Естественно, когда я пытаюсь инициализировать UIViewController, он ожидает объект NSCoder.

Однако я понятия не имею, откуда берется этот объект NSCoder или как его правильно сделать. В документации говорится, что это объект объявления интерфейса.

Знаете ли вы, как я могу создать объект NSCoder, который позволит мне инициализировать мой UIViewController, или где-то в приложении есть объект NSCoder, который я могу получить?

public class Controller:UIViewController, UIAlertViewDelegate
{
    var _viewAuto:AutoUI! //newName

    override init()
    {
        super.init()
    }

    required public init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

введите здесь описание изображениявведите здесь описание изображения


person Aggressor    schedule 26.02.2015    source источник


Ответы (1)


init(coder aDecoder: NSCoder) вызывается только тогда, когда представление создается из раскадровки. Чтобы создать собственный UIViewController и создать экземпляр вручную, все, что вам нужно сделать, это добавить:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

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

person kellanburket    schedule 26.02.2015
comment
У меня есть это, и он все еще не позволит мне запустить его без кодера. - person Aggressor; 26.02.2015
comment
Я обновил свой вопрос своим кодом, и когда я пытаюсь создать экземпляр UIViewController. Это не позволит мне запустить его без кодера. Я не могу просто использовать () - person Aggressor; 26.02.2015
comment
Это странно. Можете ли вы опубликовать код из класса, где происходит инициализация? Я предполагаю, что C_NewPhotoEditor является контроллером — кстати, UIAlertViewDelegate устарел с IOS8, поэтому вам вообще не следует его использовать. - person kellanburket; 26.02.2015
comment
Инициализация такая же, как у контроллера, это просто подкласс с тем же пустым вызовом инициализации. - person Aggressor; 26.02.2015
comment
Я имею в виду, что это за тип C_NewPhotoEditor? Я только что скомпилировал ваш код без каких-либо ошибок или предупреждений, поэтому C_NewPhotoEditor не должен каким-то образом соответствовать вашему примеру. Вы уверены, что тип C_NewPhotoEditor — это не просто UIViewController? - person kellanburket; 26.02.2015
comment
Контроллер является подклассом UIViewController, как и C_NewPhotoEditor. - person Aggressor; 26.02.2015
comment
Я добавил подпись класса - person Aggressor; 26.02.2015
comment
Вы также переопределили init() в C_NewPhotoEditor? - person kellanburket; 26.02.2015
comment
Да, я добавил требуемое общедоступное переопределение init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initializeVars() } - person Aggressor; 26.02.2015
comment
Когда я удалил это, это сработало, спасибо. Я отхожу от раскадровок, и кажется, что это (устаревший код) заставляло его по-прежнему требовать кодера. - person Aggressor; 26.02.2015