我正在遵循有关使用 Apple 的 AVCam 代码的过时指南。
Apple 提供了“CameraViewController”。讲师制作了一个“相机”VC,它是 Apple 的 cameraVC 的子类。在 Apple 的代码中,因为它与 AVCamera 一起工作,所以有一个预览 View 实际显示了相机输出。在视频中,这家伙改变了
@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
我确实已将预览 View 连接到我的 Storyboard。
在指南中,他在 Swift 项目中使用了 Apple 的 Objective-C 代码,但现在 Apple 已经发布了 Swift 代码。
关于如何使这项工作起作用/为什么会发生错误的任何想法?
最佳答案
IBOutlets 在加载 View 之前不会被分配。您正尝试在 super.viewDidLoad 触发之前访问 IBOutlet,因此 View 尚未出现在屏幕上,previewView 为 nil。
你可以把它放在 super.viewDidLoad 之后,并根据父类的代码(self.view.layoufIfNeeded())在需要时刷新 View
关于swift - 子类化另一个 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471107/