SwiftUI适配iOS16导航控制器引起的闪退

这篇具有很好参考价值的文章主要介绍了SwiftUI适配iOS16导航控制器引起的闪退。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当时iPhone14系列手机升级到iOS16.5.1系统以后,当用户登录后再次退出登录闪退货登录后退出登录闪退。
由于SwiftUI提倡用struct代替类,导致悲剧产生,闪退时无法打印是那个结构体(class类实现时会打印类名),因为是struct也没有deinit跟踪内存是否泄漏。开启僵尸进程打印只有一个这样的鬼话:

2023-06-30 19:52:42.637552+0800 xingqun_ios[4191:551916] *** -[_TtGC7SwiftUI41StyleContextSplitViewNavigationControllerVS_19SidebarStyleContext_ removeChildViewController:]: message sent to deallocated instance 0x10d02d000

定位闪退在main函数哪里。
iPhone14以下手机正常,只有iPhone14系列手机系统是iOS16才会出现。
经过三天个反复定位和查资料发现是iOS的导航栏变更产生的。iOS16要用NavigationStack代替NavigationView。

    var body: some View {
        if #available(iOS 16.0, *) {
            NavigationStack {
                VStack(spacing: 0) {
                    LoginTitleView(dismiss: .init(dismissAction: dismiss, type: .normal), from: .loginBySms) {
                        toPage = .toLoginPassword
                    }
                    phoneInput

                    // 新用户进入验证码注册页面 老用户进入验证码登录页面
                    switch loginModel.isNew {
                    case true: register
                    case false: loginByCode
                    default: Spacer()
                    }
                }
                .navigation(item: $toPage, destination: destination)
                .animation(.default, value: loginModel.isNew)
                .fullBackground(.white)
                .ignoresSafeArea(.keyboard, edges: .bottom)
            }
            .dismissKeyboard([.tap, .simulDrag])
            .noPaddingFullBackground(Color.white)
        } else {
            NavigationView {
                VStack(spacing: 0) {
                    LoginTitleView(dismiss: .init(dismissAction: dismiss, type: .normal), from: .loginBySms) {
                        toPage = .toLoginPassword
                    }
                    phoneInput

                    // 新用户进入验证码注册页面 老用户进入验证码登录页面
                    switch loginModel.isNew {
                    case true: register
                    case false: loginByCode
                    default: Spacer()
                    }
                }
                .navigation(item: $toPage, destination: destination)
                .animation(.default, value: loginModel.isNew)
                .fullBackground(.white)
                .ignoresSafeArea(.keyboard, edges: .bottom)
            }
            .dismissKeyboard([.tap, .simulDrag])
            .noPaddingFullBackground(Color.white)
        }
    }

闪退日志:文章来源地址https://www.toymoban.com/news/detail-513224.html


Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x0000001200000000
Exception Codes: 0x0000000000000002, 0x0000001200000000
VM Region Info: 0x1200000000 is in 0x1000000000-0x7000000000;  bytes after start: 8589934592  bytes before end: 403726925823
      REGION TYPE                 START - END      [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      commpage (reserved)      fc0000000-1000000000 [  1.0G] ---/--- SM=NUL  ...(unallocated)
--->  GPU Carveout (reserved) 1000000000-7000000000 [384.0G] ---/--- SM=NUL  ...(unallocated)
      UNUSED SPACE AT END
Termination Reason: SIGNAL 10 Bus error: 10
Terminating Process: exc handler [638]

Triggered by Thread:  0

Thread 0 name:   Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib               	       0x1964fc414 lookUpImpOrForward + 64
1   libobjc.A.dylib               	       0x1964f6cc4 _objc_msgSend_uncached + 68
2   UIKitCore                     	       0x19f6ca538 -[UIViewController dealloc] + 772
3   UIKitCore                     	       0x19f6c8160 -[UINavigationController dealloc] + 308
4   UIKitCore                     	       0x19f95112c -[_UISplitViewControllerColumnContents .cxx_destruct] + 44
5   libobjc.A.dylib               	       0x1964f60a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
6   libobjc.A.dylib               	       0x1964fae00 objc_destructInstance + 80
7   libobjc.A.dylib               	       0x1965044fc _objc_rootDealloc + 80
8   CoreFoundation                	       0x19d48518c cow_cleanup + 168
9   CoreFoundation                	       0x19d4bd458 -[__NSDictionaryM dealloc] + 148
10  libobjc.A.dylib               	       0x1964f60a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
11  libobjc.A.dylib               	       0x1964fae00 objc_destructInstance + 80
12  libobjc.A.dylib               	       0x1965044fc _objc_rootDealloc + 80
13  libobjc.A.dylib               	       0x1964f60a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
14  libobjc.A.dylib               	       0x1964fae00 objc_destructInstance + 80
15  libobjc.A.dylib               	       0x1965044fc _objc_rootDealloc + 80
16  UIKitCore                     	       0x19f6ca96c -[UIResponder dealloc] + 124
17  UIKit                         	       0x2277b3f10 -[UIResponderAccessibility dealloc] + 56
18  UIKitCore                     	       0x19f6ca670 -[UIViewController dealloc] + 1084
19  libobjc.A.dylib               	       0x1964f61d4 AutoreleasePoolPage::releaseUntil(objc_object**) + 196
20  libobjc.A.dylib               	       0x1964f9bdc objc_autoreleasePoolPop + 256
21  UIKitCore                     	       0x19f66a44c -[_UIAfterCACommitBlock run] + 92
22  UIKitCore                     	       0x19f66a36c -[_UIAfterCACommitQueue flush] + 168
23  UIKitCore                     	       0x19f66a280 _runAfterCACommitDeferredBlocks + 496
24  UIKitCore                     	       0x19f508be8 _cleanUpAfterCAFlushAndRunDeferredBlocks + 108
25  UIKitCore                     	       0x19f9c7c18 _UIApplicationFlushCATransaction + 72
26  UIKitCore                     	       0x19fb184b0 _UIUpdateSequenceRun + 84
27  UIKitCore                     	       0x1a017cc8c schedulerStepScheduledMainSection + 144
28  UIKitCore                     	       0x1a017c1e8 runloopSourceCallback + 92
29  CoreFoundation                	       0x19d52e128 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
30  CoreFoundation                	       0x19d53a7b4 __CFRunLoopDoSource0 + 176
31  CoreFoundation                	       0x19d4bf5e8 __CFRunLoopDoSources0 + 244
32  CoreFoundation                	       0x19d4d50d4 __CFRunLoopRun + 828
33  CoreFoundation                	       0x19d4da3ec CFRunLoopRunSpecific + 612
34  GraphicsServices              	       0x1d897735c GSEventRunModal + 164
35  UIKitCore                     	       0x19f8676e8 -[UIApplication _run] + 888
36  UIKitCore                     	       0x19f86734c UIApplicationMain + 340

到了这里,关于SwiftUI适配iOS16导航控制器引起的闪退的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 第三人称 玩家控制器+相机控制器

    今天给大家分享一个简单的Unity第三人称视角下玩家控制器和相机控制器的脚本编写方法。   效果如下: 主要分三部分实现:人物旋转、人物移动、相机旋转。 1.人物移动: 首先获取到人物水平和垂直移动的参数: 因为人物移动的方向跟摄像头一致,所以需要根据摄像头的

    2024年02月06日
    浏览(81)
  • 18-k8s控制器资源-cronjob控制器

            job控制器是执行完一次任务,就结束;         cronjob控制器,是基于job控制器,定期频率性执行任务;等同于linux系统中的crontab一样; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata:   name: xinjizhiwa spec:   schedule: \\\"* * * * *\\\"   #定义job的模板   jobTemplate

    2024年02月22日
    浏览(72)
  • 15-k8s控制器资源-deployment/部署控制器

            在学习rc和rs控制器资源时,我们指导,这两个资源都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级;         那么

    2024年02月21日
    浏览(70)
  • 14-k8s控制器资源-rs控制器replicasets

            replicaset副本控制器,简称:rs控制器;         用法:与rc控制器“几乎”相同;         能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式         注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样

    2024年02月21日
    浏览(61)
  • 13-k8s的控制器资源-rc控制器replicationcontrollers

            replicationcontrollers控制器资源,简称:rc控制器;         简单理解,rc控制器就是控制相同的pod副本数量;         使用rc控制器资源创建pod,就可以设定创建pod的数量; [root@k8s231 rc]# vim rc.yaml apiVersion: v1 kind: ReplicationController metadata:   name: rc01 spec:   #控制pod的副本

    2024年02月20日
    浏览(64)
  • 【进口控制器替代】基于Zynq-7020 FPGA的NI 8槽CompactRIO控制器

    667 MHz双核CPU,512 MB DRAM,1 GB存储容量,Zynq-7020 FPGA,更宽工作温度范围,8槽CompactRIO控制器 cRIO-9068是一款坚固耐用的无风扇嵌入式控制器,可用于高级控制和监测应用。这款软件设计控制器搭载FPGA、运行NI Linux Real-Time操作系统的实时处理器以及嵌入式用户界面功能。cRIO-906

    2024年01月25日
    浏览(62)
  • Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 3.流程跳转 在web.xml里添加Servlet然后执行 可以看到通过url拼接可以获取传递的数据 四种跳转指的是:在SpringMVC中控制器与JSP或者控制器与控制器之间的跳转。 Controller - - forward — JSP Co

    2024年02月05日
    浏览(57)
  • 在 iOS 16 中用 SwiftUI Charts 创建一个折线图

    苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式,而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。此外,自定义图表的外观和感觉

    2024年02月01日
    浏览(47)
  • JMeter 逻辑控制之IF条件控制器

    JMeter-5.4.1 添加While Controller 右键线程组-添加-逻辑控制器-While控制器 添加后,面板如下 仅Expression值为true,才会执行位于其下的操作 最好勾选(默认配置)Interpret Condition as Variable Expression?,这样Expression输入框可以有两种输入选择: 输入一个值为true 或者false的变量 比如,如果

    2024年02月02日
    浏览(59)
  • 自抗扰(ADRC)控制原理及控制器设计

    自抗扰控制是在PID控制算法基础上进行改进的新型控制方法,它具有不依赖于控制对象模型、不区分系统内外扰的结构特点。常用的自抗扰控制器主要由 跟踪微分器 (Tracking Differentiator,TD)、 扩张状态观测器 (Extended State Observer,ESO)和 非线性状态误差反馈控制率 (Non

    2024年01月18日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包