ios - 我的自定义框架崩溃'无法在捆绑包中加载 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
解决方案
确保您的扫描仪视图 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]
}
推荐阅读
- sql - 将 CHAR 字符串列中的所有值转换为 DATETIME?
- sql - 每周查询某一天,回溯一年
- sql - 在 Oracle 中显示 (01/01/2015) 到今天之间的所有日期
- c# - 在 C# 中使用 webhook 中的 JSON
- c# - 如何从代码中选择表单的背景颜色?
- python - 了解总值存储在递归函数中的位置 - Python
- javascript - SQL 查询使用 knexJS 在 DATE 字段上返回缓冲区
- php - 帖子缩略图图像显示在父 div 之外
- nativescript - 在为 iOS 构建我的 NativeScript 应用程序时,我没有设置 CFBundleIdentifier
- go - 如何在 VSCode 中为静态分析设置活动的 go build 标签?