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 ...打印没有显示任何东西。

+0

是的,不是正确的做事方式。首先,不要从视图控制器调用网络方法。其次,PerformSegue应该启动你不想要的转换。第三,prepareForSegue应该在ViewController中,并且必须标记为“覆盖”。如果你在该方法中设置了断点,我假定它没有被调用。 – pbergson

在你的代码中,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) 
    } 
} 
+0

谢谢!我试过了,因为问题是我不能使用productdescString,因为它在函数内部使用 –

+0

然后你必须记录它。使用类属性。在其他范围内准备函数不会起作用。它必须在课堂上提供,并且必须被覆盖。 – Avi

+0

我调整了它,我做了一个小调整: –