#ios #iphone #swift #uistoryboardsegue
#iOS #iPhone #swift #uistoryboardsegue
Вопрос:
Я хочу передать значение в раскадровке путем инициализации в раскадровке. Этот код, используемый в xib, работает хорошо. Но в раскадровке происходит сбой моего приложения. Это мои фрагменты кода, пожалуйста, помогите, любая помощь будет оценена.
В FirstViewController
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
viewControllerd = storyboard.instantiateViewControllerWithIdentifier("a") as? SecondViewController
viewControllerd = SecondViewController.init(title: "helo")
addViewControllerAsChildViewController(viewControllerd!)
Контроллер secondView
init(title : String)
{
a = title
super.init(nibName: "SecondViewController", bundle: nil)
}
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)!
}
Комментарии:
1. Пожалуйста, покажите журнал сбоев.
Ответ №1:
viewControllerd = SecondViewController.init(title: "helo")
замените код на
viewControllerd.title = "helo"
и не нужен следующий код :
init(title : String){
a = title
super.init(nibName: "SecondViewController", bundle: nil)
}
Комментарии:
1. Затем создайте переменную date в классе SecondViewController и передайте ее следующим образом: viewControllerd.date = Date()
2. или замените init(заголовок: строка, дата: Дата){ a = title super.init(nibName: «SecondViewController», bundle: nil) }
Ответ №2:
У вас беспорядок в вашем коде.
Вероятно, приложение вылетает из-за двойного значения viewControllerd
.
Он определяется как constant ( let
), но вы задаете ему значение дважды: viewControllerd = storyboard.instantiateViewControllerWithIdentifier("a") as? SecondViewController
и viewControllerd = SecondViewController.init(title: "helo")
.
Кроме того, super.init(nibName: "SecondViewController", bundle: nil)
это не имеет значения при работе с раскадровкой.
init(coder aDecoder: NSCoder)
вызывается, когда вы создаете экземпляр контроллера представления из раскадровки, и вы можете просто передать ему значение.
Что вы можете сделать, так это установить значение для вновь созданного свойства контроллера представления.
Например.
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let viewControllerd = storyboard.instantiateViewControllerWithIdentifier("a") as? SecondViewController
viewControllerd.a = "helo"
addViewControllerAsChildViewController(viewControllerd!)
Комментарии:
1. Сэр, можем ли мы не передавать значение с помощью init, как мы делаем в xib
2. @Rishab я не понял вашего комментария. Вы не можете передать аргумент из кода контроллеру представления, который создается из раскадровки.
3. Еще раз, вы можете передать аргумент, установив значение для некоторого свойства.