iOS从Bundle加载自定义视图触发EXC_BREAKPOINT错误求助
问题代码
public override init(frame: CGRect) { super.init(frame: frame) setUpView() } public required init?(coder: NSCoder) { super.init(coder: coder) setUpView() } func setUpView() { let name = String(describing: type(of: self)) let nib = UINib(nibName: name, bundle: .main) nib.instantiate(withOwner: self, options: nil) fixViewInContainer(view: mainView, containerView: self) }
执行nib.instantiate(withOwner: self, options: nil)时触发Thread 3: EXC_BREAKPOINT (code=1, subcode=0x1048db98c)错误,以下是常见排查方向:
XIB文件名与类名不匹配
代码中通过String(describing: type(of: self))获取类名作为XIB文件名,需确保XIB文件名和自定义View的类名完全一致(区分大小写,包括命名空间),比如类是CustomCardView,XIB必须也是CustomCardView.xib。XIB的File's Owner设置错误
打开XIB文件,检查Identity Inspector中File's Owner的Class是否设置为你的自定义View类,不要混淆File's Owner和根View的Class(根View的Class无需设置为自定义类,除非有特殊需求)。XIB中未正确关联
mainView属性
若mainView为nil,后续fixViewInContainer方法也可能触发崩溃。打开XIB,确认根View已经和自定义View类中的mainViewIBOutlet正确关联,没有断开或关联到错误对象。Bundle加载路径错误
如果XIB文件不在主Bundle中(比如放在子模块、静态库或其他Bundle),使用.main会导致找不到XIB。可以替换为Bundle(for: type(of: self)),确保加载当前类所在的Bundle。XIB文件损坏或结构异常
尝试重新创建XIB文件,复制原布局内容后重新关联属性和File's Owner,避免XIB的XML结构出现损坏或不兼容问题。
内容的提问来源于stack exchange,提问作者Josué H.

