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

我已经对应用程序进行了调整,以将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)

    }
}


知道我缺少什么吗?





注意:btw VC2实际上在我的项目中称为“设置”

最佳答案

因此,当实例化一个VC(由storyboard创建)时,首先我们需要按名称通过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


然后我们可以使用

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


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

关于ios - swift presentViewController以编程方式在destinationVC VDL中找到nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54272112/

10-14 16:49