swift - 子类化另一个 View Controller ?

标签 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”。讲师制作了一个“相机”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/

相关文章:

在 Nav 和 Tab Controller 之间快速传递数据

ios - 尝试使用NSKeyedArchiver在UserDefaults中保存自定义对象

iOS 8 iPad AVCaptureMovieFileOutput 在录制 13 - 14 秒后丢失/丢失/从未获得音轨

c# - 如何使用 AVCaptureVideoDataOutput 避免 AVCaptureSession 中的丢帧

ios - 子类化 UITextField 并设置文本字体

ios - 如何自动为 Swift 类创建初始化程序?

ios - 从 subview Controller 中隐藏父 View 的 UIView

ios - 使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput

objective-c - 子类化 UIPanGestureRecognizer 以在识别之前等待条件

javascript - 在 Javascript 中子类化 Uint8Array