Шаблон проектирования делегата + разбор JSON проблема - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок (1 месяц), поэтому прошу прощения за мою некомпетентность. Проблема в том, что я правильно проанализировал JSON и пытаюсь передать данные в V C, используя шаблон проектирования делегата ...

Я правильно проанализировал JSON, потому что он печатает то, что Я сказал это:

 if let safeData = data {
            if let stockInfo = self.parseJSON(safeData) {
                print(stockInfo.name)
                self.delegate!.stockInfo(stockInfo)
            }

Это не проблема. Я хочу отобразить некоторые данные на другом V C, но он не работает. Я сделал протокол:

protocol StockManagerDelegate {
func stockInfo(_ info: StockModel)}

В V C я устанавливаю делегата как себя, когда представление загружается:

stockManager.delegate = self

И я также определил метод (в V C)

 func stockInfo(_ info: StockModel) {
    print(info.exhange)
}

И, как вы видели в коде, который я прикрепил выше, я вызвал метод делегата:

self.delegate?.stockInfo(stockInfo)

Так что проблема в том, что info.exhange не печатать. Я обнаружил, что это потому, что делегат равен nil (потому что, если я принудительно разверну его, я получаю сообщение об ошибке: Неожиданно найдено nil при развертывании необязательного значения в строке, где я вызываю self.delegate ! .stockInfo (stockInfo).

Я понятия не имею, почему print(info.exhange) не работает в моем V C, потому что я предпринял все необходимые шаги. Для контекста: у меня есть два контроллера представления и когда пользователь вводит что-то в текстовое поле в первом, json анализируется и происходит переход ко второму viewController.

Напомним: это основной код для второго V C (где я хочу, чтобы информация отображалась):

class ResultViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, StockManagerDelegate{

    var stockManager = StockManager()


      override func viewDidLoad() {
          super.viewDidLoad()

          stockManager.delegate = self


          attributePicker.dataSource = self
          attributePicker.delegate = self

      }

    func stockInfo(_ info: StockModel) {
        print(info.exhange)
    }

Я очень застрял в этом. Если вам нужна дополнительная информация, пожалуйста, спросите, и я немедленно отвечу или отредактирую свой пост. Извините за плохую терминологию - еще раз, Я очень начинающий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...