失败原因【object object】_5.0iOS端闪退原因及解决

本文详细分析了iOS应用的四个典型崩溃案例,包括语音识别取消时的崩溃、用nil初始化NSDictionary、音量更新异常以及未找到指定方法的崩溃。针对每个问题,提供了具体的崩溃原因和解决方案,如判断页面状态、异常捕获、方法转发等,帮助开发者优化应用稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    小伙伴们排队坐好,我们来上课啦~~

2a08709e74fd4c4e0da0e3c9b6a1d3d8.gif

一、 崩溃一

崩溃代码:__27-[HCIAsrCommon cancelRecog]_block_invoke + 36 (HCIAsrCommon.mm:184)

崩溃截图:

0823b9f9581888041a242362c0d37bf3.png

崩溃堆栈:

Thread 24 name:

Thread 24 Crashed:

0   HXMobileBank                  0x0000000100526998 __27-[HCIAsrCommon cancelRecog]_block_invoke + 36 (HCIAsrCommon.mm:184)

1   Foundation                    0x0000000184b7d814 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16 (NSOperation.m:1341)

2   Foundation                    0x0000000184ac2770 -[NSBlockOperation main] + 96 (NSOperation.m:1360)

3   Foundation                    0x0000000184ab2b28 -[__NSOperationInternal _start:] + 612 (NSOperation.m:793)

4   Foundation                    0x0000000184b7fbb0 __NSOQSchedule_f + 228 (NSOperation.m:1767)

5   libdispatch.dylib             0x0000000182f669a0 _dispatch_client_callout + 16 (object.m:473)

6   libdispatch.dylib             0x0000000182f74ad4 _dispatch_queue_serial_drain + 928 (inline_internal.h:2431)

7   libdispatch.dylib             0x0000000182f6a2cc _dispatch_queue_invoke + 884 (queue.c:4853)

8   libdispatch.dylib             0x0000000182f76a50 _dispatch_root_queue_drain + 540 (inline_internal.h:2468)

9   libdispatch.dylib             0x0000000182f767d0 _dispatch_worker_thread3 + 124 (queue.c:5550)

10  libsystem_pthread.dylib       0x000000018316f100 _pthread_wqthread + 1096 (pthread.c:2196)

11  libsystem_pthread.dylib       0x000000018316ecac start_wqthread + 4

崩溃解决:

       这个闪退的原因是在取消语音识别的时候发生的,在退出页面后引用了当前视图引发的崩溃。解决办法是判断当然页面是否属于语音识别页面,是在进行后续操作。

二、 崩溃二

崩溃代码:HXMobileBank: -[HCITtsPlayerManager onSynthSyllables:andSyllablesList:andOffset:andLength:] + 268

 崩溃截图:

8a951e80d158e09b0dff507b3ef67419.png

崩溃堆栈:

Incident Identifier: 75AF9976-19C7-4C8D-B8BC-1704E242217B

Beta Identifier:     5CA78583-3864-4775-8F11-BE0F0E58A8B0

Hardware Model:      iPhone11,2

Process:             HXMobileBank [1622]

Path:                /private/var/containers/Bundle/Application/5300D22A-2C7E-4993-A0CD-8AAF024F1B8F/HXMobileBank.app/HXMobileBank

Identifier:          com.hxb.mobile.client

Version:             5.0.0.6 (5.0.0)

AppStoreTools:       10G3

AppVariant:          1:iPhone11,2:12.2

Beta:                YES

Code Type:           ARM-64 (Native)

Role:                Foreground

Parent Process:      launchd [1]

Coalition:           com.hxb.mobile.client [629]

Date/Time:           2019-08-22 21:16:43.3657 +0800

Launch Time:         2019-08-22 20:57:44.5489 +0800

OS Version:          iPhone OS 12.4 (16G77)

Baseband Version:    1.06.02

Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)

Exception Codes: 0x0000000000000000, 0x0000000000000000

Exception Note:  EXC_CORPSE_NOTIFY

Triggered by Thread:  0

Last Exception Backtrace:

0   CoreFoundation                0x1d16deab8 __exceptionPreprocess + 232 (NSException.m:172)

1   libobjc.A.dylib               0x1d08e3d00 objc_exception_throw + 60 (objc-exception.mm:557)

2   CoreFoundation                0x1d1655f80 _CFThrowFormattedException + 116 (CFObject.m:1958)

3   CoreFoundation                0x1d15db49c -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] + 372 (NSPlaceholderDictionary.m:0)

4   CoreFoundation                0x1d15cba40 +[NSDictionary dictionaryWithObjects:forKeys:count:] + 68 (NSDictionary.m:627)

5   HXMobileBank                  0x100880524 -[HCITtsPlayerManager onSynthSyllables:andSyllablesList:andOffset:andLength:] + 268 (HCITtsPlayerManager.m:155)

6   HXMobileBank                  0x1008828ec __82-[HCITtsSynthesizer onSynthSyllablesWithSentence:andSyllable:andOffset:andLength:]_block_invoke + 120 (HCITtsSynthesizer.mm:188)

7   libdispatch.dylib             0x1d10ec308 _dispatch_call_block_and_release + 32 (init.c:1372)

8   libdispatch.dylib             0x1d10ed888 _dispatch_client_callout + 20 (object.m:511)

9   libdispatch.dylib             0x1d10f973c _dispatch_main_queue_callback_4CF + 1012 (inline_internal.h:2441)

10  CoreFoundation                0x1d166e734 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1813)

11  CoreFoundation                0x1d16693e4 __CFRunLoopRun + 1888 (CFRunLoop.c:3113)

12  CoreFoundation                0x1d1668964 CFRunLoopRunSpecific + 452 (CFRunLoop.c:3247)

13  GraphicsServices              0x1d38a9d8c GSEventRunModal + 108 (GSEvent.c:2245)

14  UIKitCore                     0x1feb05758 UIApplicationMain + 216 (UIApplication.m:4353)

15  HXMobileBank                  0x1002cbd98 main + 736 (main_2.arm64.m_:109)

16  libdyld.dylib                 0x1d1124fd8 start + 4

崩溃解决:

      这个很明显是用nil来初始化NSDictionary,判空即可解决该问题

三、 崩溃三

崩溃代码:HXMobileBank: -[MCVolumeQueue popVolume] + 176

崩溃截图:

9b8aa76dd4d9b41b9a8469cb68f1c1b3.png

崩溃堆栈:

Thread 20 name:

Thread 20 Crashed:

0   libobjc.A.dylib               0x0000000195be7bf0 objc_retain + 16 (objc-object.h:441)

1   HXMobileBank                  0x0000000100757d20 -[MCVolumeQueue popVolume] + 176 (MCVoiceWaveView_2.arm64.m_:245)

2   HXMobileBank                  0x00000001007596b4 -[MCVoiceWaveView updateMeters] + 100 (MCVoiceWaveView_2.arm64.m_:798)

3   HXMobileBank                  0x000000010075962c -[MCVoiceWaveView invokeWaveCallback] + 72 (MCVoiceWaveView_2.arm64.m_:787)

4   QuartzCore                    0x000000019ad7cf90 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 636 (CADisplay.mm:2349)

5   IOKit                         0x0000000196c514b0 IODispatchCalloutFromCFMessage + 488 (IOKitLib.c:1216)

6   CoreFoundation                0x0000000196960a8c __CFMachPortPerform + 188 (CFMachPort.c:522)

7   CoreFoundation                0x0000000196987690 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56 (CFRunLoop.c:1996)

8   CoreFoundation                0x0000000196986ddc __CFRunLoopDoSource1 + 440 (CFRunLoop.c:2133)

9   CoreFoundation                0x0000000196981c00 __CFRunLoopRun + 2096 (CFRunLoop.c:3152)

10  CoreFoundation                0x00000001969810b0 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3247)

11  Foundation                    0x000000019734efac -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 300 (NSRunLoop.m:367)

12  Foundation                    0x000000019738a46c -[NSRunLoop(NSRunLoop) run] + 88 (NSRunLoop.m:389)

13  HXMobileBank                  0x0000000100758510 -[MCVoiceWaveView voiceWaveThreadEntryPoint:] + 304 (MCVoiceWaveView_2.arm64.m_:465)

14  Foundation                    0x000000019747b6a4 __NSThread__start__ + 984 (NSThread.m:1175)

15  libsystem_pthread.dylib       0x00000001966142c0 _pthread_body + 128 (pthread.c:857)

16  libsystem_pthread.dylib       0x0000000196614220 _pthread_start + 44 (pthread.c:884)

17  libsystem_pthread.dylib       0x0000000196617cdc thread_start + 4

崩溃解决:

       这个可以看到崩溃的文件是MCVoiceWaveView_2.arm64.m_,这个文件是加固后的代码文件,增加音量的时候发生的异常,使用try catch即可避免

四、 崩溃四

崩溃代码:HXMobileBank: -[PCLoginSettingViewController viewDidLoad] + 1924

崩溃截图:

db2a16af1b26b2d4660213d522830578.png

崩溃堆栈:

Last Exception Backtrace:

0   CoreFoundation                0x1e543927c __exceptionPreprocess + 228 (NSException.m:172)

1   libobjc.A.dylib               0x1e46139f8 objc_exception_throw + 56 (objc-exception.mm:557)

2   CoreFoundation                0x1e5355ab8 -[NSObject(NSObject) doesNotRecognizeSelector:] + 140 (NSObject.m:323)

3   CoreFoundation                0x1e543eac4 ___forwarding___ + 1408 (NSForwarding.m:3224)

4   CoreFoundation                0x1e544075c _CF_forwarding_prep_0 + 92

5   HXMobileBank                  0x10254c878 -[PCLoginSettingViewController viewDidLoad] + 1924 (PCLoginSettingViewController_2.arm64.m_:1387)

6   UIKitCore                     0x211651fc8 -[UIViewController loadViewIfRequired] + 1012 (UIViewController.m:3211)

7   UIKitCore                     0x2116523cc -[UIViewController view] + 28 (UIViewController.m:3233)

8   UIKitCore                     0x2115af4c8 -[UINavigationController _startCustomTransition:] + 1072 (UINavigationController.m:1828)

9   UIKitCore                     0x2115c34b8 -[UINavigationController _startDeferredTransitionIfNeeded:] + 708 (UINavigationController.m:6707)

10  UIKitCore                     0x2115c48e0 -[UINavigationController __viewWillLayoutSubviews] + 164 (UINavigationController.m:6972)

11  UIKitCore                     0x2115a7af0 -[UILayoutContainerView layoutSubviews] + 224 (UILayoutContainerView.m:87)

12  UIKitCore                     0x212092ed0 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1292 (UIView.m:15707)

13  QuartzCore                    0x1e98eda20 -[CALayer layoutSublayers] + 184 (CALayer.mm:9450)

14  QuartzCore                    0x1e98f29c8 CA::Layer::layout_if_needed(CA::Transaction*) + 332 (CALayer.mm:9330)

15  QuartzCore                    0x1e98552d0 CA::Context::commit_transaction(CA::Transaction*) + 348 (CALayer.mm:2468)

16  QuartzCore                    0x1e9883330 CA::Transaction::commit() + 640 (CATransactionInternal.mm:444)

17  QuartzCore                    0x1e9883f20 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 92 (CATransactionInternal.mm:845)

18  CoreFoundation                0x1e53ca5f8 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 (CFRunLoop.c:1822)

19  CoreFoundation                0x1e53c5320 __CFRunLoopDoObservers + 412 (CFRunLoop.c:1932)

20  CoreFoundation                0x1e53c589c __CFRunLoopRun + 1228 (CFRunLoop.c:2950)

21  CoreFoundation                0x1e53c50b0 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3247)

22  GraphicsServices              0x1e75c579c GSEventRunModal + 104 (GSEvent.c:2245)

23  UIKitCore                     0x211bfb978 UIApplicationMain + 212 (UIApplication.m:4353)

24  HXMobileBank                  0x10267bd98 main + 736 (main_2.arm64.m_:109)

25  libdyld.dylib                 0x1e4e8a8e0 start + 4

崩溃解决:

这个崩溃的代码是doesNotRecognizeSelector说明没找到这个方法,最好的解决办法是:将未知的方法打包成一个NSInvocation转交给别的对象,但我们在forwardInvocation:完全可以不实现任何真的转发,就可以拦截掉这次的转发,所以采用这种方式最合适。在实现的时候,我们在MethodSignature方法里,将方法签名指向一个我们自定义的类的方法,并且拿到签名,返回给系统。在forwardInvocation里,不做任何实现就可以了。

欢迎留言互动和推荐课题

我们会继续努力,感谢阅读~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值