Передача значения в раскадровке

#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. Еще раз, вы можете передать аргумент, установив значение для некоторого свойства.