swift presentViewController 以编程方式在destinationVC VDL中找到nil

Posted

技术标签:

【中文标题】swift presentViewController 以编程方式在destinationVC VDL中找到nil【英文标题】:swift presentViewController programmatically finds nil in destinationVC VDL 【发布时间】:2015-04-16 19:47:12 【问题描述】:

试图通过理解基本的代码行来巩固我的知识。

我已调整我的应用程序以使用 ViewController(VC)2 作为初始 VC 而不是 VC1。

我正在练习完全通过代码填充这个 VC2。在将 UIButton 编码到 VC1 中时,我的控制台输出“致命错误:在展开可选值时意外发现 nil”(lldb)。并且线程 1 指向我设置了一些属性的 VC1 viewDidLoad (VDL)

VC1

override func viewDidLoad() 
    super.viewDidLoad()
    P1Chip.hidden = true; P2Chip.hidden = true; P3Chip.hidden = true; P4Chip.hidden = true; P5Chip.hidden = true; P6Chip.hidden = true; P7Chip.hidden = true; P8Chip.hidden = true; P9Chip.hidden = true


etc

当它是初始 VC 时,这个 VC1 在 VDL 上没有任何问题。

填充 VC2 的方法

import Foundation
import UIKit

class VC2: UIViewController 
    let home:UIButton! = UIButton(frame: CGRectMake(10,10,15,15)) as UIButton


    override func viewDidLoad() 
        super.viewDidLoad()
        home.backgroundColor = UIColor(red: 0.4, green: 0.6, blue: 0, alpha: 1)
        home.setTitle("home", forState: .Normal)
        home.addTarget(self, action: "home:", forControlEvents: .TouchUpInside)
        view.addSubview(home)     
    

    func home(sender:UIButton!) 
        self.presentViewController((VC1() as UIViewController), animated: true, completion: nil)

        

知道我错过了什么吗?

注意:顺便说一句,VC2 在我的项目中实际上被称为设置

【问题讨论】:

使用您的 VC2 代码,我可以毫无问题地过渡到另一个 ViewController。错误点在哪里? 指向VC1的VDL P1Chip...~ 你能给我们展示更多VC1中的代码吗?我在您的 viewDidLoad 中没有看到任何选项。 你考虑过数组吗...? 考虑...意思是使用它们来获得更简洁的代码?或者这个错误可能是由数组引起的或误用? 【参考方案1】:

所以在实例化一个 VC(故事板创建)时,首先我们需要按名称通过 UIStoryboard 路由我们的调用

let storyboard = UIStoryboard(name: "Main", bundle: nil)  

然后使用我们的故事板设置 VC 的故事板 ID 实例化一个 VC

let vc = storyboard.instantiateViewControllerWithIdentifier("VC1") as VC1    //VC1 refers to destinationVC source file and "VC1" refers to destinationVC Storyboard ID

然后我们可以使用 VC 来呈现

self.presentViewController(vc, animated: true, completion: nil)

这将导入所有 destinationVC 的对象及其 IBOutlet 引用。

【讨论】:

以上是关于swift presentViewController 以编程方式在destinationVC VDL中找到nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift Playground:让 ViewController 调用 presentViewController

Swift Bridging-Header Objective-C presentViewController

Swift presentViewController 完成块仅在调试中工作而不在发布中调用

swift presentViewController 以编程方式在destinationVC VDL中找到nil

PresentViewController 故障排除

Swift3.0:照片选择