在两个失去值的 ViewController 之间传递 UIImage 数组

Posted

技术标签:

【中文标题】在两个失去值的 ViewController 之间传递 UIImage 数组【英文标题】:Passing UIImage array between two ViewControlllers losing values 【发布时间】:2020-07-11 03:43:02 【问题描述】:

我在内存中的 2 个 VC 之间传递一组图像。我不知道这是否是一个问题并且不可能做到?当第二个视图控制器引用第一个 UIImages 数组时,我在第二个视图控制器中得到空白图像。

class ViewPDFAfterSnapshotViewController: UIViewController 
    @IBOutlet weak var pdfView: PDFView!
    @IBOutlet weak var confirmUploadButton: UIButton!
    
    @IBOutlet weak var CancelUploadButton: UIButton!
    
    
    
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        let vc = CameraViewController()
        // convert to PDF
        let pdfDocument = PDFDocument()
        for i in 0 ..< vc.images.count 
            let image = vc.images[i]
              let pdfPage = PDFPage(image: image)
              pdfDocument.insert(pdfPage!, at: i)
        
        
        pdfView.displayMode = .singlePageContinuous
        pdfView.autoScales = true
        pdfView.displayDirection = .vertical
        pdfView.document = pdfDocument
        
    
    

编辑 1:好的,从我得到的反馈和链接的文章中我做到了:

func transistionToPDFView()
        
        let vc = ViewPDFAfterSnapshotViewController()
        vc.images = images
        
        
        navigationController?.pushViewController(vc, animated: true)
        

        
        view.window?.rootViewController = vc
        view.window?.makeKeyAndVisible()
    

【问题讨论】:

从另一个视图控制器显示您的代码。 vc 是一个新实例。这就是为什么它们的值是空的 请告诉您如何在两个视图控制器之间导航。在导航时,您将参考下一个视图控制器。届时您可以简单地传递信息。 您应该将图像声明为ViewPDFAfterSnapshotViewController 的实例属性,并在呈现视图控制器之前设置图像属性。 @LeoDabus 我这样做了:@IBAction func cancelPressed(_ sender: Any) let vc = ViewPDFAfterSnapshotViewController() vc.images = images transistionToPDFView() 但它仍然为空 @jstocke2 您需要提供与设置图像相同的控制器。 pdfViewController.images = images 【参考方案1】:

您正在创建CameraViewController 的新实例。这是不正确的。每次创建 CameraViewController 的新实例时,它都会是全新的引用。

您应该访问CameraViewController 的已可用/已创建实例。

在视图控制器之间执行 segue 或导航时,您可以将数据从一个视图控制器传递到另一个视图控制器。

假设您有 A 和 B 视图控制器,在 A 到 B 之间导航时,您可以执行以下操作:

let b = B() // Instantiate B view controller from storyboard with identifier

b.images = images // Data to pass to the next view controller

如果你想正确理解,可以参考这篇文章:

https://www.hackingwithswift.com/example-code/system/how-to-pass-data-between-two-view-controllers

【讨论】:

我试过这个:@IBAction func cancelPressed(_ sender: Any) let vc = ViewPDFAfterSnapshotViewController() vc.images = images transistionToPDFView() 我以为这基本上就是你想要的,但它仍然是空的? @jstocke2 从故事板访问 ViewController 并使用它来呈现或推送导航 你在介绍ViewPDFAfterSnapshotViewController 吗?那个代码在哪里?如果您正在展示/推送,请使用该实例来传递信息。 ViewPDFAfterSnapshotViewController 创建一个可以保存图像数组的变量,并从您提供的控制器ViewPDFAfterSnapshotViewController 中传递数据。 不要在viewDidLoad 中创建CameraViewController 的实例。

以上是关于在两个失去值的 ViewController 之间传递 UIImage 数组的主要内容,如果未能解决你的问题,请参考以下文章