2017-02-16 11 views
0

Я отправляю HTTP-запрос. Если результат будет успешным, я хочу, чтобы он появился на втором UIViewController. Однако, если это не удается, я хочу показать сбой на исходном UIViewController.Swift 3 Отправить HTTP-запрос Результат UIViewController

let parameters: Parameters = [ 
     "x": 2, 
     "y": 2 
    ] 

    Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON { response in 
     if((response.result.value) != nil) { 
      let secondViewController:SecondViewController = SecondViewController() 
      self.present(secondViewController, animated: true, completion: nil) 
      let jsonVar: JSON = JSON(response.result.value!) 
      secondViewController.jsonDisplayResult.text = "\(jsonVar)" 
     } else { 
      self.jsonDisplayError.text = "no response" 
     } 
    } 

Я уже создал второй ViewController и метку, чтобы отобразить результат. Я получаю эту ошибку: фатальная ошибка: неожиданно найден нуль при развертывании необязательного значения (lldb).

+0

Что такое контекст, в котором вы вызываете метод запроса о Alamofire? – Lubakis

+0

В качестве параметров передаются два целых числа. Запрос POST возвращает сумму двух целых чисел. Если одно целое число равно null, то оно вернет Invalid Response – Dexstrum

+0

В какой строке это произошло? Разрешено ли jsonVar: JSON = JSON (response.result.value!). Если это так, потому что response.result.value - это ноль и! означает не ноль. –

ответ

1

Попробуйте это:

Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { (response: DataResponse<Any>) in 
    if let response = response.result.value as? <insert Type of value> { 
     let secondViewController:SecondViewController = SecondViewController() 
     secondViewController.responseText = response 
     self.present(secondViewController, animated: true, completion: nil) 

    } else { 
     self.jsonDisplayError.text = "no response" 
    } 
} 

, а также создать новый вар responseText в вашем secondViewController и назначить jsonDisplayResult.text = resonseText в viewDidLoad, потому что ваш jsonDisplayResult Этикетка является проб. nil в состоянии, в котором вы пытаетесь присвоить ему свойство text.

+0

Мне удалось заставить его перейти к следующему экрану. Однако в поле UILabel ничего не появляется. – Dexstrum

+0

, в какой момент вы назначаете label.text (viewDidLoad)? – zero3nna

0

Моя догадка jsonDisplayResult является UILabel или UITextField или что-то в этом роде, подключил через IBOutlet, и это ноль, потому что вы инстанцирован ваш secondViewController в SecondViewController(), который не будет установлен какой-либо из точек.

Попробуйте создать экземпляр из раскадровки. Убедитесь, что идентификатор правильно установлен в раскадровке.

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 

EDIT:

После нажатия на ваш SecondViewController установить раскадровки ID здесь:

enter image description here

+0

Я получаю «неявное использование« я »в закрытии, использую« я ». Когда я переключаюсь на себя, я получаю «Значение типа ViewController не имеет члена instantiateViewController» – Dexstrum

+0

Использовать self.storyboard? .instantiateViewController ... – Frankie

+0

2017-02-16 10: 46: 08.132 HTTPRequest [36936: 289563] *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «Storyboard ()) не содержит контроллер представления с идентификатором« SecondViewController » – Dexstrum

Смежные вопросы