Swift 3:需要将数据传递到下一个视图控制器而不移动到它
我需要从一个视图控制器传递数据,来自Alamofire请求的数据,并且必须发送到下一个View Controller中的UIlabels。我不想过渡到该视图控制器。但目标View Controller必须能够读取和使用Alamofire请求中的数据。我试着用segue,但我没有得到它的工作,我怀疑这是否是正确的方式来做到这一点。Swift 3:需要将数据传递到下一个视图控制器而不移动到它
这是我有:
Alamofire.request(URL_SCAN_ID, method: .post, parameters: ScanParameters, encoding: JSONEncoding.default) .responseJSON
{
response in
//printing response
print(response.request!)
print(response.response!)
print(response.data!)
print(response.result)
print(response.error)
//getting the json value from the server
let value = response.result.value
print(value!)
let json = JSON(value!)
let productdesc0:JSON = json["productdesc"]
let productdescString = productdesc0.string
self.performSegue(withIdentifier: "ScanInfo", sender: productdescString)
func prepareForSegue(segue: UIStoryboardSegue, sender: Any){
if (segue.identifier == "ScanInfo"){
let destinationVC = segue.destination as! ScanInfoViewController
destinationVC.productdescription01 = productdescString!
print("oeiii",sender)
}
}
我认为数据甚至没有发送到SEGUE ...打印没有显示任何东西。
在你的代码中,prepare函数在闭包中。它必须在文件级别上。如果给定的代码来自视图控制器,它必须是 -
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "ScanInfo"){
let destinationVC = segue.destination as! ScanInfoViewController
destinationVC.productdescription01 = productdescString!
print("oeiii",sender)
}
}
谢谢!我试过了,因为问题是我不能使用productdescString,因为它在函数内部使用 –
然后你必须记录它。使用类属性。在其他范围内准备函数不会起作用。它必须在课堂上提供,并且必须被覆盖。 – Avi
我调整了它,我做了一个小调整: –
是的,不是正确的做事方式。首先,不要从视图控制器调用网络方法。其次,PerformSegue应该启动你不想要的转换。第三,prepareForSegue应该在ViewController中,并且必须标记为“覆盖”。如果你在该方法中设置了断点,我假定它没有被调用。 – pbergson