Сейчас я практикуюсь в создании нескольких разных приложений и пытаюсь выполнить простую задачу передачи данных от одной раскадровки к другой.
Я хочу перейти от кнопки «+» на главном контроллере представления к «созданию цели» на контроллере представления «Создать цель». (Это отлично работает)
Затем я хочу, чтобы пользователь заполнил три текстовых поля в Create Goal ViewController и отправил данные с помощью кнопки Create Goal.
Затем пользователь будет перенаправлен обратно к контроллеру главного представления домашней страницы, и данные из трех текстовых полей будут введены в три метки на контроллере главного представления.
Однако всякий раз, когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Неустранимая ошибка: неожиданно обнаружено значение nil при неявном развертывании необязательного значения: file / Users / jon / Desktop / Practice App Development / PracticePassDataOpna / PracticePassDataOpna / ViewController.swift, строка 28 2020-04-18 16: 15: 05.181014 + 0100 PracticePassDataOpna [8267: 419753] Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения: file / Users / jon / Desktop / Practice App Development / PracticePassDataOpna / PracticePassDataOpna / ViewController.swift , строка 28
Для справки, вот мои контроллеры представления:
Контроллер основного вида:
Создать контроллер представления:
А вот мой код:
Главный ВК:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var goalName: UILabel!
@IBOutlet weak var targetDate: UILabel!
@IBOutlet weak var longDescription: UILabel!
var goalText = ""
var dateText = ""
var descriptionText = ""
override func viewDidLoad() {
super.viewDidLoad()
goalName.text = goalText
targetDate.text = dateText
longDescription.text = descriptionText
}
@IBAction func createButton(_ sender: UIButton) {
performSegue(withIdentifier: "createSegue", sender: self)
}
}
Создать ВК:
import UIKit
class CreateGoalViewController: UIViewController {
@IBOutlet weak var goalInput: UITextField!
@IBOutlet weak var dateInput: UITextField!
@IBOutlet weak var descriptionInput: UITextField!
var goalAdd = ""
var dateAdd = ""
var descriptionAdd = ""
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func createGoalButton(_ sender: UIButton) {
self.goalAdd = goalInput.text!
self.dateAdd = dateInput.text!
self.descriptionAdd = descriptionInput.text!
performSegue(withIdentifier: "createGoalSegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var vc = segue.destination as! ViewController
vc.goalText = self.goalAdd
vc.dateText = self.dateAdd
vc.descriptionText = self.descriptionAdd
}
}
И чтобы было понятнее - это строка 28:
goalName.text = goalText
Любая помощь была бы замечательной - я не понимаю, почему он не работает, учитывая, что это пустая строка? Может в этом проблема. Ваше здоровье!
1 ответ
Проблема в этой функции:
@IBAction func createGoalButton(_ sender: UIButton) {
self.goalAdd = goalInput.text!
self.dateAdd = dateInput.text!
self.descriptionAdd = descriptionInput.text!
performSegue(withIdentifier: "createGoalSegue", sender: self)
}
В этой функции вы принудительно развернули необязательный параметр, в котором нет значения. Принудительное развертывание очень подвержено ошибкам, поэтому вам следует вместо этого написать функцию как:
@IBAction func createGoalButton(_ sender: UIButton) {
let x = "You never added a goal"
let y = "You never added a date"
let z = "You never added a description"
self.goalAdd = goalInput.text ?? print(x)
self.dateAdd = dateInput.text ?? print(y)
self.descriptionAdd = descriptionInput.text ?? print(z)
performSegue(withIdentifier: "createGoalSegue", sender: self)
}
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.