Программно инициализировать ViewController - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь инициализировать UIViewController в своем приложении Swift, но я столкнулся с проблемой, на которую не могу найти какой-либо однозначный ответ.

Я хотел бы вызвать это из FlowCoordinator для инициализации контроллера, но мой инициализатор требует объект NSCoder из-за требуемой функции init? (coder: NSCoder).


MyAwesomeController()

Есть ли способ по-разному инициализировать контроллер, без необходимости передавать объект NSCoder?

Если нет, как я могу создать такой объект таким образом, чтобы избежать следующего исключения:

'NSInvalidArgumentException', причина: '*** -decodeObjectForKey:невозможно отправить в абстрактный объект класса NSCoder: создайте конкретный экземпляр! '

Заранее большое спасибо

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Поскольку UIViewController наследует feom UIResponder, а UIResponder наследует от NSObject, он имеет пустой инициализатор, такой как init ().Так что вы можете просто вызвать MyAwesomeController (), и он работает без каких-либо ошибок.Если есть какая-то ошибка, то она где-то похожа на розетку в раскадровке.

0 голосов
/ 11 мая 2019

Используйте что-то вроде этого, я включил свойство также в качестве демонстрации:

class MyAwesomeViewController: UIViewController {
    let someInt: Int

    init(someInt: Int) {
        self.someInt = someInt

        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("Storyboard are a pain")
    }
}

Мне нравится создавать все программно.

...