Как я могу ввести зависимость с помощью пользовательского инициализатора в UITabBarController? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть пользовательский UITabBarController без файла NIB. Контроллеры навигации всех модулей создаются в методе viewDidLoad с функцией создателя. Я хочу добавить coreDataStack с параметром через функцию создателя, например:

override func viewDidLoad() {
super.viewDidLoad()

let aModuleNavCont = aModuleBuilder.createaModule(coreDataStack) as! UINavigationController
...
}

Но перед этим я должен установить свойство coreDataStack в своем собственном классе UITabBarController. Я написал этот init:

init(coreDataStack: CoreDataStack) {
    self.coreDataStack = coreDataStack
    super.init(nibName: nil, bundle: nil)
}

Но он сказал: 'обязательный' инициализатор 'init (кодер :)' должен быть предоставлен подклассом 'UITabBarController'. Поэтому я сгенерировал этот код с помощью Xcode:

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Теперь сборка завершена успешно, и приложение работает хорошо (выглядит хорошо), но я догадываюсь, что это не очень хорошее решение.

Я 'попытался добавить super.init(coder: aDecoder) строку в требуемом init, но он сказал "Свойство' self.coreDataStack 'не инициализировано при вызове super.init".

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

Заранее благодарим за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 12 ноября 2018

Вы правы, что нервничаете по этому поводу, но на самом деле это правильный и стандартный способ реализации инициализации Coder, когда вы не используете NIB.

Эта ракушка (странная вещь, которая ощущается приклеенной кsystem) происходит от взаимодействия между высокодинамичным характером Cocoa и более строгими требованиями инициализации Swift.(Swift добавил эти требования инициализации специально из-за уроков, которые мы извлекли из ObjC ....)

...