【问题标题】:Subclassing another view controller?子类化另一个视图控制器?
【发布时间】:2016-11-07 17:31:38
【问题描述】:

我正在关注有关使用 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,所以有一个预览视图实际上显示了相机输出。在视频中,这家伙改变了

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

并将其更改为

var _previewView : PreviewView

然后他浏览了苹果的代码并将所有 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 代码。

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

【问题讨论】:

    标签: swift avcapturesession subclassing


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 2015-11-16
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      相关资源
      最近更新 更多