我的自定义框架崩溃'无法在捆绑包中加载 NIB

Posted

技术标签:

【中文标题】我的自定义框架崩溃\'无法在捆绑包中加载 NIB【英文标题】:my custom framework crashing 'Could not load NIB in bundle我的自定义框架崩溃'无法在捆绑包中加载 NIB 【发布时间】:2020-02-11 08:13:43 【问题描述】:

我有一个自定义框架,其中包括一个 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 code framework code

更新:

新的崩溃截图

更新:

当我尝试时

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


正在低于错误 !enter image description here]3

我的 xib 连接如下所示

【问题讨论】:

【参考方案1】:

请确保您的扫描仪视图 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]

【讨论】:

抱歉,我误会了您的问题。我会更新我的答案 你之前是对的,因为他们提供了一个没有 UI 的框架,所以我想通过添加一个 ui 在它之上创建一个包装器。因此,当我调用包括 ui 在内的方法时,一切都会出现。在创建新框架时面临上述问题 如果我删除我的 commitinit () 那么它会崩溃pasteboard.co/IUa9VQKp.png 哦,我明白了.. 你需要调用你的 commitinit() 方法。我的删除建议与对您的设置的误解有关 屏幕截图显示,您仍然将笔尖顶部视图类设置为QKMRZScannerView。请将类设置为 UIView 并在您的 nib 中添加“QKMRZScannerView”作为子视图【参考方案2】:

在你的 commitinit 函数中添加这些代码

let bundle = Bundle(identifier:"your Bundle ID") 
bundle?.loadNibNamed("your XIB file name", owner: self,options: nil)

【讨论】:

以上是关于我的自定义框架崩溃'无法在捆绑包中加载 NIB的主要内容,如果未能解决你的问题,请参考以下文章

无法在捆绑包中加载 Nib

无法在捆绑包中加载 NIB。可可豆项目

我的应用在 iPad 模拟器上运行良好,但在 iPad(iOS 8.4)上崩溃,xcode 说无法在捆绑中加载 NIB

无法在捆绑包中加载 NIB

无法在捆绑包中加载 NIB

Xamarin 工作室。单触。无法在捆绑包中加载 NIB ... 带有名称