I am attempting to pass data from one controller to the next. The code is as follows
First view controller:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
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 jsonVar: JSON = JSON(response.result.value ?? "success")
let destViewController : JSONResult = segue.destination as! JSONResult
let result = "\(jsonVar)"
destViewController.textLabel = result
print(result)
//self.jsonDisplayError.text = "\(jsonVar)"
} else {
self.jsonDisplayError.text = "no response"
}
}
}
Second view controller:
@IBOutlet var jsonResult: UILabel!
var textLabel = String()
override func viewDidLoad() {
jsonResult.text = textLabel
}
The result is being printed to the console correctly but it is not displaying in the label on the second view controller page.
I think the problem is sending data in async callback, you've two options here,
Pass parameters to secondviewcontroller and make your API request on secondviewcontroller's viewdidload event.
class FirstViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let parameters: Parameters = [
"x": 2,
"y": 2
]
destViewController.parametrs = parameters
}
}
And secondviewcontroller,
class SecondViewController: UIViewController {
@IBOutlet var jsonResult: UILabel!
var parameters: Parameters
override func viewDidLoad() {
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON { response in
if((response.result.value) != nil) {
let jsonVar: JSON = JSON(response.result.value ?? "success")
jsonResult.text = result
} else {
self.jsonDisplayError.text = "no response"
}
}
}
}
Create a seque between two viewcontroller (not button click etc.), and performSegue
manually when your async callback completed,
class FirstViewController: UIViewController {
var result = ""
@IBAction func buttonClick(sender: UIButton) {
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 jsonVar: JSON = JSON(response.result.value ?? "success")
self.result = "\(jsonVar)"
self.performSegue(withIdentifier: "yourSegueIdentifier", sender: nil)
} else {
self.jsonDisplayError.text = "no response"
}
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destViewController : JSONResult = segue.destination as! JSONResult
destViewController.textLabel = self.result
}
}
Second view controller:
class SecondViewController: UIViewController {
@IBOutlet var jsonResult: UILabel!
var textLabel = String()
override func viewDidLoad() {
jsonResult.text = textLabel
}
}
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments