对另一个视图控制器进行子类化?

时间:2016-11-07 17:31:39

标签: swift avcapturesession subclassing

我正在关注使用Apple的AVCam代码的过时指南。

https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010112-Intro-DontLinkElementID_2

Apple提供了“CameraViewController”。教师制作一个“Camera”VC,它是Apple的cameraVC的子类。在Apple的代码中,因为它正在使用AVCamera,所以有一个实际显示相机输出的预览视图。在视频中,家伙改变了

@IBOutlet weak var previewView : PreviewView //Apple's PreviewView class

并将其更改为

var _previewView : PreviewView
然后他通过apple的代码并将所有的previewView更改为_previewView,然后在他自己的ViewController中有这个:

class hisViewController: ApplesViewController {

     @IBOutlet weak var previewView : PreviewView!

     override func viewDidLoad() {

        self._previewView = previewView
        super.viewDidLoad()

    }

}

当他跑步时,他让相机跑。当我运行这个时,我得到一个EXC断点错误:在解开一个Optional值时意外地发现了nil

我确实将previewView连接到我的故事板。

在指南中,他在Swift项目中使用了Apple的Objective-C代码,但现在Apple发布了Swift代码。

任何想法如何使这项工作/错误发生的原因?

1 个答案:

答案 0 :(得分:2)

在加载视图之前,不会分配IBOutlet。您正试图在super.viewDidLoad触发之前访问IBOutlet,因此该视图尚未出现在屏幕上,并且previewView为零。

你可以把它放在super.viewDidLoad之后,如果需要的话刷新视图,具体取决于超类的代码(self.view.layoufIfNeeded())