UINavigationController 推送崩溃
UINavigationController push crash
我有一个 NestedViewController,我正试图将其推入 UINavigationController。这会导致崩溃并显示以下堆栈跟踪:
此外:
- 所有这些都发生在主线程上
- 这会在 iOS 11 和 12
上重现
animated
标志不会改变任何东西
- NestedViewController 以模态方式呈现在应用程序的其他地方并且它成功地做到了,没有崩溃
- NestedViewController 从情节提要中获取其布局
- NestedViewController 的视图以编程方式初始化且与情节提要布局相同,但仍会导致崩溃
- 推送一个空的 UIViewController 不会导致崩溃
我做错了什么?
UPD1:我做了这个,但这不会导致崩溃:
let controlla = { () -> UIViewController in
let cont = UIViewController()
cont.view = {
let view = UIView()
view.backgroundColor = UIColor.green
let stack = UIStackView(arrangedSubviews: [ {
let view = UIView()
view.backgroundColor = UIColor.yellow
view.snp.makeConstraints { make in
make.height.equalTo(128)
}
return view
}() ])
view.addSubview(stack)
stack.snp.makeConstraints { make in
make.top.leading.trailing.equalToSuperview()
}
return view
}()
return cont
}()
controller.pushViewController(controlla, animated: true)
UPD2:应用户 Adeel 的要求,在此处的评论中是在中止断点命中时控制台中的内容:
libc++abi.dylib: terminating with uncaught exception of type NSException
如果就这么简单,而且信息就在那里,这个问题就不会真的存在了,是吗。
UPD3:因此,为了扩展我的调查,我卸载了视图控制器中除根视图之外的所有视图。
场景树开始看起来像这样:
然后,当然,我摆脱了视图控制器中的所有插座和代码。
它仍然崩溃。不过,模态呈现仍然可以正常工作。
UPD4:为了以防万一,我将 NestedViewController 重命名为其他名称。没用。
UPD5:在 UPD1 之前它看起来像这样:
controller.pushViewController(controller, animated: true)
检查这个 Whosebug
崩溃信息不明确。希望对你有所启发。
如 UPD5 中所述,您推入导航控制器的控制器本身就是同一个控制器。
我有一个 NestedViewController,我正试图将其推入 UINavigationController。这会导致崩溃并显示以下堆栈跟踪:
此外:
- 所有这些都发生在主线程上
- 这会在 iOS 11 和 12 上重现
animated
标志不会改变任何东西- NestedViewController 以模态方式呈现在应用程序的其他地方并且它成功地做到了,没有崩溃
- NestedViewController 从情节提要中获取其布局
- NestedViewController 的视图以编程方式初始化且与情节提要布局相同,但仍会导致崩溃
- 推送一个空的 UIViewController 不会导致崩溃
我做错了什么?
UPD1:我做了这个,但这不会导致崩溃:
let controlla = { () -> UIViewController in
let cont = UIViewController()
cont.view = {
let view = UIView()
view.backgroundColor = UIColor.green
let stack = UIStackView(arrangedSubviews: [ {
let view = UIView()
view.backgroundColor = UIColor.yellow
view.snp.makeConstraints { make in
make.height.equalTo(128)
}
return view
}() ])
view.addSubview(stack)
stack.snp.makeConstraints { make in
make.top.leading.trailing.equalToSuperview()
}
return view
}()
return cont
}()
controller.pushViewController(controlla, animated: true)
UPD2:应用户 Adeel 的要求,在此处的评论中是在中止断点命中时控制台中的内容:
libc++abi.dylib: terminating with uncaught exception of type NSException
如果就这么简单,而且信息就在那里,这个问题就不会真的存在了,是吗。
UPD3:因此,为了扩展我的调查,我卸载了视图控制器中除根视图之外的所有视图。
场景树开始看起来像这样:
然后,当然,我摆脱了视图控制器中的所有插座和代码。
它仍然崩溃。不过,模态呈现仍然可以正常工作。
UPD4:为了以防万一,我将 NestedViewController 重命名为其他名称。没用。
UPD5:在 UPD1 之前它看起来像这样:
controller.pushViewController(controller, animated: true)
检查这个 Whosebug
崩溃信息不明确。希望对你有所启发。
如 UPD5 中所述,您推入导航控制器的控制器本身就是同一个控制器。