2017-01-03 2 views
0

При использовании метода prepare (forSegue) для передачи данных контроллеру назначения назначения в сегменте все члены целевого VC равны нулю. Таким образом, моя программа вылетает при попытке доступа к этим элементам.Swift 3: только значения nil в контроллере назначения назначения segue

Мой код в контроллере представления источника:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "Second2DetailEdit"{ 
     var detailVC = segue.destination as! DrinkDetailViewController 
     detailVC.headerLabel.text = "Edit Drink" 

    } 
    //... 
} 

Сама ВК не равна нулю. Только все члены ВК. Я что-то забыл? Это происходит только в моем новом проекте Swift 3. Аналогичный код в моих проектах Swift 2 не имеет проблем. Спасибо заранее.

ответ

1

Представление диспетчера вида назначения еще не создано, и поэтому все IBOutlets равны нулю. Попробуйте отправить необходимую информацию в обычных свойствах, таких как строки и в ViewDidLoad адресата, обновите свое представление.

0

Я хотел бы предложить безопасно разворачивать свой detailVC, а не силу разворачивать ...

if segue.identifier == "Second2DetailEdit" { 
    if let detailVC = segue.destination as? DrinkDetailViewController { 
     detailVC.headerLabel.text = "Edit Drink" 
    } 
} 

Вам будет легче настройки свойств на destinationVC и проходящее информацию для тех, кто вместо того, чтобы сделать это через UILabel время s ...

1

Лучший способ создать переменную в вашем втором контроллере представления и вместо этого установить текст.

После инициализации vc вы можете установить headerLabel.text в новую переменную в viewDidLoad