скажите, пожалуйста, почему у меня ноль? У меня 2 контроллера: MainViewController
и MililetersViewController
. В MainViewController
пользователь нажимает кнопку и вводит MililetersViewController
, где он выбирает объем напитка в PickerView
. Далее, в том же представлении пользователь нажимает кнопку «Добавить», и данные, выбранные пользователем, должны go вернуться в MainViewController
и записать в label.text
MainViewController
код:
class MainViewController: UIViewController, MililetersVCDelegate {
var selectedVolume = ""
@IBOutlet weak var resultValue: UILabel!
@IBOutlet weak var currentValue: UILabel!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.navigationItem.title = "Main"
}
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.isNavigationBarHidden = true
self.tabBarController?.navigationItem.hidesBackButton = true
DispatchQueue.main.async {
self.resultValue.text = UserSettings.result
UserDefaults.standard.synchronize()
}
}
@IBAction func unwindToMainVC(segue:UIStoryboardSegue) {}
func passingDataBack(withString: String) {
self.currentValue.text = withString
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc = segue.destination as? MililetersViewController
vc?.proto = self
}
}
MililetersViewConrtoller
код:
import UIKit
protocol MililetersVCDelegate {
func passingDataBack(withString: String)
}
class MililetersViewController: UIViewController, UIViewControllerTransitioningDelegate {
@IBOutlet weak var pickerViewOutlet: UIPickerView!
@IBOutlet weak var addButtonOutlet: UIButton!
var selectedVolume = ""
var volume = MilimetersScreen()
var proto: MililetersVCDelegate!
override func viewDidLoad() {
super.viewDidLoad()
pickerViewOutlet.dataSource = self
pickerViewOutlet.delegate = self
self.transitioningDelegate = self
}
@IBAction func goToMainVC(_ sender: UIButton) {
proto.passingDataBack(withString: selectedVolume) // ERROR: Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
performSegue(withIdentifier: K.BackToMainView, sender: self)
}
}
extension MililetersViewController: UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return volume.volumeArray.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return String(volume.volumeArray[row]) + " " + "ml"
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectedVolume = String(volume.volumeArray[row])
print(selectedVolume) // Here I see that the number from the array and pickerView are written into the variable
}
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 35
}
}
Здесь я получаю ошибку, что там nil:
@IBAction func goToMainVC (_ sender: UIButton) {
proto.passingDataBack (withString: selectedVolume) // ERROR: Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
performSegue (withIdentifier: K.BackToMainView, sender: self)
}
}
Я не понимаю, где nil . Пожалуйста, помогите