#ios #swift
#iOS #swift
Вопрос:
Я получаю сообщение об ошибке при попытке выполнить назначение переменной с моим destinationViewController.
Сообщение об ошибке выглядит следующим образом: Поток 1: EXC_BREAKPOINT (код= EXC_I386_BPT, подкод = 0x0)
Это в моей функции prepareForSegue.
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if segue.identifier == "LoginSegue"{
let vc = segue.destinationViewController as LoggedInViewController
vc.email = emailTextfield.text
}
}
В другом файле это выглядит следующим образом.
var email: String?
которая находится вверху.
Тогда это:
override func viewDidLoad() {
super.viewDidLoad()
println("Email is:")
println(email)
println("Email was")
}
Но я никогда не захожу во второй файл.
Это строка let vc = segue.Назначение ViewController как LoggedInViewController, помеченное ошибкой.
Оба файла swift подключены к контроллерам навигации.
Я не знаю, что еще вам нужно, но я, конечно, опубликую весь код, который вам нужно понять!
Спасибо!
Ответ №1:
В вашем случае контроллером назначения является контроллер навигации, а не ваш LoggedInViewController, поэтому segue.destinationViewController as LoggedInViewController
это ошибка, поэтому происходит сбой.
Попробуйте вот так
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if segue.identifier == "LoginSegue"{
let navigationController = segue.destinationViewController as UINavigationController
let vc = navigationController.topViewController as LoggedInViewController
vc.email = emailTextfield.text
}
}
Комментарии:
1. Черт возьми, это работает! : Я не могу проголосовать за это, получил только 1 повторение! : ( Но спасибо, что нашли время, чтобы помочь мне 🙂
2. Да, заметил! Теперь у меня есть!
3. Я только что получил аналогичную ошибку, я на самом деле использую то же самое, но вместо
navigationController.viewControllers[0]
я используюnavigationController.topViewController
. Есть ли разница?4. @OliverBorchert Вы правы. вы должны использовать topViewController, чтобы получить текущий контроллер представления в стеке навигации. ViewControllers[0] выдает контроллер нижнего вида. Я только что отредактировал свой ответ, спасибо, что заметили.
Ответ №2:
На случай, если кто-нибудь придет сюда, потому что это первое попадание в EXC_BREAKPOINT:
Для меня это очень показательное исключение было вызвано из-за fatal error: unexpectedly found nil while unwrapping an Optional value
, которое произошло из-за того, что IBOutlet использовался до его инициализации.