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

Subclassing another view controller?

我正在关注有关使用 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 的相机VC。在 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 断点错误时:在展开可选值时意外发现 nil

我肯定已经将 previewView 连接到我的故事板。

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

关于如何使这项工作起作用/为什么会发生错误的任何想法?

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

你可以把它放在 super.viewDidLoad 之后,如果需要,根据超类的代码刷新视图 (self.view.layoufIfNeeded())