在 Xcode 外部运行时未调用主 ViewController 的 viewDidLoad

问题描述 投票:0回答:1

我有一个简单的、最小的 Swift 应用程序,它具有一个带有 AVPlayerView 的 ViewController。当我在 XCode 中运行该应用程序时,AVPlayerView 显示为我的 ViewController 主视图的子视图,并且 ViewController 的 viewDidLoad: 方法被调用。

如果我独立于构建文件夹(或任何地方)打开应用程序,则不会调用 viewDidLoad 方法(从我添加的 OSLog'ing 可以看出)并且 AVPLayerView 不会出现。奇怪。

我已经构建了两次应用程序以消除任何界面构建器的怪异之处。该应用程序在所有系统中表现出相同的行为。

class ViewController: NSViewController {
    

@IBOutlet weak var playerView: AVPlayerView!
var playerLayer: AVPlayerLayer?

@IBAction func open(_:Any?) {
    let panel = NSOpenPanel()
    panel.canChooseFiles = true
    panel.canChooseDirectories = false
    panel.allowsMultipleSelection = false
    
    if #available(macOS 11.0, *) {
        panel.allowedContentTypes = [UTType.movie]
    } else {
        panel.allowedFileTypes = ["mov"]
    }
    
    panel.beginSheetModal(for: self.view.window!) { response in
        if response == .OK {
            if panel.urls.count > 0 {
                DispatchQueue.main.async() {
                    let url = URL(fileURLWithPath:panel.urls[0].path)
                    let asset = AVURLAsset(url: url)
                    let item = AVPlayerItem(asset: asset)
                    let player = AVPlayer(playerItem: item)
                    self.playerView.player = player
                }
            }
        }
    }
}

override func viewDidLoad() {
    super.viewDidLoad(). //<- not called when run outside of Xcode
}
}
swift xcode viewcontroller
1个回答
-3
投票

您遇到的问题可能与视图控制器及其管理的视图的生命周期有关。特别是,当应用程序独立于 Xcode 运行时,可能是视图控制器的视图未正确加载。这里有一些你可以尝试的事情:

1) 检查您的应用的入口点 确保您的应用的入口点设置正确。当您从 Xcode 运行您的应用程序时,入口点通常设置为您应用程序的主视图控制器。但是,当您独立于 Xcode 运行应用程序时,入口点的设置可能会有所不同。要检查应用程序的入口点,请查看应用程序目标设置中的“主界面”字段。确保它设置为正确的故事板或 xib 文件。

2) 检查视图控制器的视图属性 在您的视图控制器的 viewDidLoad 方法中,尝试记录视图属性的值以查看它是否为零。如果 view 属性为 nil,则表示该视图尚未加载。您可以通过访问视图属性强制加载视图。例如,您可以将以下代码添加到您的 viewDidLoad 方法中:

let _ = 查看

这将强制加载视图,这将导致调用 viewDidLoad 方法。

3) 检查 AVPlayerView 的约束 AVPlayerView 可能没有正确添加到视图层次结构中,这可能导致它不显示。检查 AVPlayerView 上的约束以确保它们设置正确。您也可以尝试以编程方式添加 AVPlayerView 而不是使用 Interface Builder 来查看是否可以解决问题。

4) 检查应用程序的日志 检查应用程序的日志,看看是否有任何与视图控制器或 AVPlayerView 相关的错误消息或警告。这可能会给您提供有关问题所在的线索。

5) 尝试在物理设备上运行应用程序 如果您在模拟器上运行该应用程序,请尝试在物理设备上运行它以查看问题是否仍然存在。模拟器的行为可能与物理设备不同。

希望这些建议能帮助您解决问题!

© www.soinside.com 2019 - 2024. All rights reserved.