swift 为什么我的委托被发现为空,即使我的选择器视图总是数据?

von4xj4u  于 2023-11-16  发布在  Swift
关注(0)|答案(1)|浏览(99)

在这个PreferencesVC上,我有两个pickerViews供用户选择两种货币发送到主用户界面。在保存更改和发送数据时,它说意外地发现nil。为什么我的pickerViews总是有来自非空元组的数据?

  1. protocol ChangeCurrencyDelegate {
  2. func userEnteredNewCurrency(top: CurrencyTuple, bottom: CurrencyTuple)
  3. }
  4. class ExchangePreferencesVC: UIViewController {
  5. @IBOutlet weak var topCurrencyLabel: UILabel!
  6. @IBOutlet weak var topCurrencyPicker: UIPickerView!
  7. @IBOutlet weak var bottomCurrencyLabel: UILabel!
  8. @IBOutlet weak var bottomCurrencyPicker: UIPickerView!
  9. var delegate: ChangeCurrencyDelegate?
  10. var topPickerOptions = [(name: String, symbol: String, flag: UIImage)]()
  11. var bottomPickerOptions = [(name: String, symbol: String, flag: UIImage)]()
  12. var userCurrencyChoice: Currencies!
  13. override func viewDidLoad() {
  14. super.viewDidLoad()
  15. topPickerOptions = currencyISOCode
  16. bottomPickerOptions = currencyISOCode
  17. }
  18. // User top and bottom pickerView choices
  19. func createTopAndBottomCurrency() {
  20. let topUserIndex = topCurrencyPicker.selectedRow(inComponent: 0)
  21. let bottomUserIndex = bottomCurrencyPicker.selectedRow(inComponent: 0)
  22. let topUserChoice = currencyISOCode[topUserIndex]
  23. let bottomUserChoice = currencyISOCode[bottomUserIndex]
  24. userCurrencyChoice = Currencies(top: topUserChoice, bottom: bottomUserChoice)
  25. }
  26. // MARK: - Cancel and Save Changes actions
  27. @IBAction func saveChanges(_ sender: Any) {
  28. delegate?.userEnteredNewCurrency(top: userCurrencyChoice.top, bottom: userCurrencyChoice.bottom)
  29. self.dismiss(animated: true, completion: nil)
  30. }
  31. }

字符串
委托是这样分配的->

  1. // MARK: - Delegate of the ChangeCurrency protocol
  2. extension ExchangeRateViewController: ChangeCurrencyDelegate {
  3. func userEnteredNewCurrency(top: CurrencyTuple, bottom: CurrencyTuple) {
  4. self.topFlag.setImage(top.flag, for: .normal)
  5. self.topSymbol.text = top.symbol
  6. self.bottomFlag.setImage(bottom.flag, for: .normal)
  7. self.bottomSymbol.text = bottom.symbol
  8. }
  9. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  10. if segue.identifier == "goToPreferences" {
  11. let destinationVC = segue.destination as! ExchangePreferencesVC
  12. destinationVC.delegate = self
  13. }
  14. }
  15. }

33qvvth1

33qvvth11#

这是你的prepare方法。

  1. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  2. if segue.identifier == "goToPreferences" {
  3. let destinationVC = segue.destination as! ExchangePreferencesVC
  4. destinationVC.delegate = self
  5. }
  6. }

字符串
考虑一下如果segue的标识符不完全匹配goToPreferences会发生什么。segue仍然会发生,但委托不会被设置。所以检查你的segue标识符,并添加一些代码来处理你不识别标识符的情况。至少,你应该记录一条消息,这样你就可以更容易地发现问题。

相关问题