首页 > 解决方案 > 我的自定义框架崩溃'无法在捆绑包中加载 NIB

问题描述

我有一个自定义框架,其中包括一个 xib 和一个 UIView 类。

当我将我的测试应用程序与框架连接时,它崩溃了

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </private/var/containers/Bundle/Application/10A66571-E4BA-4C82-BDCE-82DA8018CA1C/cam.app> (loaded)' with name 'scanner''
*** First throw call stack:
(0x1b318bab0 0x1b2ea5028 0x1b307b2fc 0x1b6efbb4c 0x1b6efc9e4 0x104902338 0x104901e68 0x104902078 0x1048a7c60 0x1048a74d8 0x1048a740c 0x1048a7514 0x1b6c29994 0x1b6c2e5c8 0x1b6c2e9b4 0x1b72a9c58 0x1b72a9354 0x1b72aa2f0 0x1b72bb4d4 0x1b74ab924 0x1b68729ac 0x1b726d370 0x1b726d700 0x1b6e08dec 0x1b8355ec0 0x1b837cb50 0x1b8360fa4 0x1b837c7e4 0x104cab27c 0x104cae9a4 0x1b83a3304 0x1b83a2fb0 0x1b83a351c 0x1b310724c 0x1b31071a0 0x1b310695c 0x1b31017d8 0x1b3101084 0x1bd34f534 0x1b7271670 0x1048a867c 0x1b2f80e18)
libc++abi.dylib: terminating with uncaught exception of type NSException

我的框架代码

import UIKit
import QKMRZScanner
public class scanner: UIView,QKMRZScannerViewDelegate {

    @IBOutlet var mrzScannerView: QKMRZScannerView!

    public func mrzScannerView(_ mrzScannerView: QKMRZScannerView, didFind scanResult: QKMRZScanResult) {
        print(scanResult.documentType)
    }

    override  init(frame: CGRect) {
        super.init(frame: frame)
        commitinit()
        mrzScannerView.delegate = self
    }


    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    private func commitinit(){
        Bundle.main.loadNibNamed("scanner", owner: self, options: nil)
        addSubview(mrzScannerView)
        mrzScannerView.frame = self.bounds
        mrzScannerView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

    public func capture(){
        mrzScannerView.startScanning()
    }


}


我的测试应用代码如下

import UIKit

import testfrme
class ViewController: UIViewController {

    @IBOutlet weak var tt: scanner!
    override func viewDidLoad() {
        super.viewDidLoad()
        let d = scanner()
        d.capture()

    }


}




谁能帮我理解它为什么会崩溃?此处提供两者的完整源代码 testapp 代码 框架代码

更新:

新的崩溃截图 在此处输入图像描述

更新 :

当我尝试

        mrzScannerView = Bundle(for: QKMRZScannerView.self).loadNibNamed("QKMRZScannerView", owner: self, options: nil)


出现以下错误 !在此处输入图像描述] 3

我的 xib 连接看起来像这样 在此处输入图像描述

在此处输入图像描述

标签: iosswiftframeworksxibnib

解决方案


确保您的扫描仪视图 Nib 完全被称为“扫描仪”。
不要将您的笔尖 TopView 设置为键入“扫描仪”。而是将 filesOwner 设置为“扫描仪”。
将子视图添加到您的 nib,将此视图类设置为“QKMRZScannerView”。
将此视图连接到您的@IBOutlet var mrzScannerView

像这样加载您的视图笔尖:

func commitinit() {  
    let nib = UINib(nibName: String(describing: self), bundle: Bundle(for: type(of: self))) 

    guard let view = nib.instantiate(withOwner: self, options: nil).first as? UIView else {
        fatalError("Failed to instantiate nib \(nib)")
    }
    self.addSubview(view)
    view.frame = self.bounds
    view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}

推荐阅读