在两个失去值的 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 数组的主要内容,如果未能解决你的问题,请参考以下文章

在两个 viewController 之间导航

如何在没有 StoryBoard 的两个 ViewController 之间使用委托?

nil在两个ViewController之间委派两个不同的Bundle(swift)

如何在 UIPageViewController 中的两个 ViewController 之间传递数据

为啥我的 UIViewController 失去了对打开模式 ViewController 的引用?

如何在 Cocoa Touch 中的任意两个 ViewController 之间进行转换?