在 iPhone 应用程序中弹出视图后的 SIGABRT 信号
Posted
技术标签:
【中文标题】在 iPhone 应用程序中弹出视图后的 SIGABRT 信号【英文标题】:SIGABRT signal after popping view in iPhone application 【发布时间】:2011-02-24 17:34:43 【问题描述】:我正在开发一个在与按钮调用相关的例程完成后崩溃的 iPhone 应用程序。我正在弹出导航控制器堆栈上位置索引 1 处的视图。我单击按钮的当前视图位于索引 5 上。
我用来弹出视图的代码如下:
id callListController = [[self.navigationController viewControllers] objectAtIndex:1];
if(nil != callListController)
[self.navigationController popToViewController:callListController animated:YES];
我已经尝试在上面的代码以及要在索引 1 处加载的视图代码中设置断点。没有任何效果。中间发生了一些事情。
我使用来自 iphone(符号)的崩溃报告来分析问题。老实说,我无法理解符号文件。这是文件主要部分的转储,因为我无法附上这份问卷:
Incident Identifier: BDE0FFE7-D74F-46B5-A9BD-89AA4F483300
CrashReporter Key: fbe272c09f9d46b3e962f897e0d8a5e3de9793e1
Hardware Model: iPhone1,2
Process: iwf [151]
Path: /var/mobile/Applications/F50D0AED-94A4-48A8-8B5D-0D88B2D4D36F/iwf.app/iwf
Identifier: iwf
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-02-22 20:43:10.614 -0700
OS Version: iPhone OS 4.0.1 (8A306)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 Crashed:
0 libSystem.B.dylib 0x00088c24 __kill + 8
1 libSystem.B.dylib 0x00088c12 kill + 4
2 libSystem.B.dylib 0x00088c06 raise + 10
3 libSystem.B.dylib 0x0009f902 abort + 54
4 libSystem.B.dylib 0x0008e6de szone_error + 230
5 libSystem.B.dylib 0x0008e7ac free_tiny_botch + 60
6 libSystem.B.dylib 0x00001fe8 szone_free + 302
7 libSystem.B.dylib 0x00001ea0 malloc_zone_free + 64
8 CoreFoundation 0x00053cc8 __CFAllocatorSystemDeallocate + 8
9 CoreFoundation 0x000019d6 CFAllocatorDeallocate + 74
10 CoreFoundation 0x000036c4 _CFRelease + 288
11 CoreFoundation 0x00003566 CFRelease + 74
12 CoreFoundation 0x00015898 _CFAutoreleasePoolPop + 124
13 Foundation 0x00004822 -[NSAutoreleasePool release] + 98
14 UIKit 0x0007bc18 _UIApplicationHandleEvent + 7776
15 GraphicsServices 0x00004edc PurpleEventCallback + 1024
16 CoreFoundation 0x000742ac __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 22
17 CoreFoundation 0x000761d6 __CFRunLoopDoSource1 + 158
18 CoreFoundation 0x0007718e __CFRunLoopRun + 574
19 CoreFoundation 0x0001e0bc CFRunLoopRunSpecific + 220
20 CoreFoundation 0x0001dfca CFRunLoopRunInMode + 54
21 GraphicsServices 0x00003f88 GSEventRunModal + 188
22 UIKit 0x00007b40 -[UIApplication _run] + 564
23 UIKit 0x00005fb8 UIApplicationMain + 964
24 iwf 0x0000d434 main (main.m:14)
25 iwf 0x0000d404 start + 32
Thread 1:
0 libSystem.B.dylib 0x00034e84 kevent + 24
1 libSystem.B.dylib 0x00102a48 _dispatch_mgr_invoke + 88
2 libSystem.B.dylib 0x00102494 _dispatch_queue_invoke + 96
3 libSystem.B.dylib 0x00102634 _dispatch_worker_thread2 + 120
4 libSystem.B.dylib 0x0008b53c _pthread_wqthread + 392
5 libSystem.B.dylib 0x00082b6c start_wqthread + 0
Thread 2:
0 libSystem.B.dylib 0x00000ab0 mach_msg_trap + 20
1 libSystem.B.dylib 0x00002f94 mach_msg + 60
2 CoreFoundation 0x00074b18 __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x000770e0 __CFRunLoopRun + 400
4 CoreFoundation 0x0001e0bc CFRunLoopRunSpecific + 220
5 CoreFoundation 0x0001dfca CFRunLoopRunInMode + 54
6 WebCore 0x0000370c RunWebThread(void*) + 552
7 libSystem.B.dylib 0x0008af80 _pthread_start + 364
8 libSystem.B.dylib 0x0007d014 thread_start + 0
Thread 3:
0 libSystem.B.dylib 0x00000ab0 mach_msg_trap + 20
1 libSystem.B.dylib 0x00002f94 mach_msg + 60
2 CoreFoundation 0x00074b18 __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x000770e0 __CFRunLoopRun + 400
4 CoreFoundation 0x0001e0bc CFRunLoopRunSpecific + 220
5 CoreFoundation 0x0001dfca CFRunLoopRunInMode + 54
6 Foundation 0x0003c316 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 210
7 Foundation 0x0000c612 -[NSThread main] + 42
8 Foundation 0x00092140 __NSThread__main__ + 908
9 libSystem.B.dylib 0x0008af80 _pthread_start + 364
10 libSystem.B.dylib 0x0007d014 thread_start + 0
Thread 4:
0 libSystem.B.dylib 0x00029f24 select$DARWIN_EXTSN + 20
1 CoreFoundation 0x0007aa54 __CFSocketManager + 340
2 libSystem.B.dylib 0x0008af80 _pthread_start + 364
3 libSystem.B.dylib 0x0007d014 thread_start + 0
Thread 5:
0 libSystem.B.dylib 0x0008c3b4 __workq_kernreturn + 8
1 libSystem.B.dylib 0x0008b718 _pthread_wqthread + 868
2 libSystem.B.dylib 0x00082b6c start_wqthread + 0
Thread 6:
0 libSystem.B.dylib 0x0008c3b4 __workq_kernreturn + 8
1 libSystem.B.dylib 0x0008b718 _pthread_wqthread + 868
2 libSystem.B.dylib 0x00082b6c start_wqthread + 0
Thread 0 crashed with ARM Thread State:
r0: 0x00000000 r1: 0x00000000 r2: 0x00000001 r3: 0x3e73926c
r4: 0x00000006 r5: 0x067a9e50 r6: 0x0013f000 r7: 0x2fffe464
r8: 0x05559084 r9: 0x00000888 r10: 0x00000001 r11: 0x0013f000
ip: 0x00000025 sp: 0x2fffe464 lr: 0x3483fc19 pc: 0x3483fc24
cpsr: 0x000f0010
我有一个基本的了解,即当我转移视图时会发生此错误,但此时我并没有迷失。
任何建议都会有所帮助。
提前致谢。
分部
【问题讨论】:
【参考方案1】:正如 Izzy 所说,这通常是由释放自动释放对象引起的,在您掌握 Objective-C 中的内存管理之前,这是一个非常常见的问题。
如果您不确定具体在哪里查找问题,您可能希望首先在视图中注释掉 viewWillDisappear/dealloc 中的所有版本,并假设它可以正常工作而不会崩溃,开始放回版本中直到您缩小导致问题的 ivar 的范围。最有可能的是,您会发现 ivar 被赋予了一个自动释放对象,因此您要么不释放该对象,要么保留该对象,或者使用一种将保留对象返回给您的方法。
查看此链接了解更多背景信息:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html
【讨论】:
【参考方案2】:它崩溃了,因为您在其中一个视图控制器中过度释放。
附:在请求索引为 1 的对象之前,您应该检查 viewControllers
长度。如果 viewControllers
数组包含少于 2 个对象,则可能导致崩溃。
【讨论】:
以上是关于在 iPhone 应用程序中弹出视图后的 SIGABRT 信号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swiftui 中弹出到 TabView 应用程序中的特定视图。我也使用了 StackNavigation 但不在 swiftui 中工作