gpt4 book ai didi

ios - 一个传递的数据模型显示为 nil,即使在调试中我是在传递之前设置的 var

转载 作者:可可西里 更新时间:2023-11-01 01:49:24 26 4
gpt4 key购买 nike

我正在尝试将数据模型从我的初始 View Controller 传递到现在显示在屏幕上的 View Controller 。我有一个显示 pdf 的容器 View 。当我运行代码时,由于某种原因传递到容器中的文档为 nil。

我已经使用调试器并观察它在初始 View Controller 中的设置,但是当加载下一个 Storyboard时,由于某种原因,var 现在为 nil。我已经在 viewDidAppear 中尝试过了,但我遇到了同样的问题。

我的初始 View Controller (主页)

let documentGet = Data.documentModel[selectedRow - 1]
let storyboard = UIStoryboard(name: String(describing: NoteTakingViewController.self), bundle: nil)
let vc = storyboard.instantiateInitialViewController() as! NoteTakingViewController
vc.documentSet = documentGet

//self.navigationController?.pushViewController(vc, animated: true)
//self.present(vc, animated: true, completion: nil)
self.show(vc, sender: selectedRow)

Storyboard的下一个 View Controller ,我在其中传递了上一个 vc.documentSet = documentGet

    let pdfViewer = PDFView()
@IBOutlet weak var PDFClass: PDFViewClass!
var documentSet:DocumentModel!


override func viewDidLoad() {
super.viewDidLoad()
PDFClass.setDocument(document: self.documentSet) <----(this is where the error occurs)
self.title = documentSet.title
navigationController?.navigationBar.prefersLargeTitles = false
}

这是容器 View 的 View Controller 。这是一个自定义类,因为我试图让它在以前的 Controller 上工作,但它会阻止我试图在导航栏下方找出的工具栏(是的,直接在导航栏下方)

    private func configurePDF() {
pdfViewer.translatesAutoresizingMaskIntoConstraints = true
view.addSubview(pdfViewer)
}

func setDocument(document: DocumentModel!) {
configurePDF()
let doc = PDFDocument(url: document.url)
pdfViewer.document = doc
}

我希望 pdf 数据从主页 -> View Controller -> 容器 View Controller 。但是我在 View Controller 上得到了 nil 。我想我只是不明白 UIView 是如何加载的。我的想法是, View Controller 中的 var 是用 vc.documentSet = documentGet 设置的,然后当该 View 启动时,它会将 var 传递给容器 View 。

我希望这不是 super 简单的事情,但 swift 的工作方式与我使用 java 的经验不同。

最佳答案

您可以通过一些防御性编程和属性观察器来解决这个问题:

let pdfViewer = PDFView()
@IBOutlet weak var PDFClass: PDFViewClass!
var documentSet: DocumentModel? {
didSet {
self.title = documentSet?.title
if documentSet != oldValue {
setDocument(to: documentSet)
}
}
}

override func viewDidLoad() {
super.viewDidLoad()
setDocument(to: documentSet)
navigationController?.navigationBar.prefersLargeTitles = false
}

private func setDocument(to document: DocumentModel?) {
guard let validDocument = document else { return }
PDFClass?.setDocument(document: validDocument)
}

关于ios - 一个传递的数据模型显示为 nil,即使在调试中我是在传递之前设置的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com