Я новичок (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)
}
Я очень застрял в этом. Если вам нужна дополнительная информация, пожалуйста, спросите, и я немедленно отвечу или отредактирую свой пост. Извините за плохую терминологию - еще раз, Я очень начинающий.