sigsegv segv_accerr 在 ios7 中崩溃 mkmapview
Posted
技术标签:
【中文标题】sigsegv segv_accerr 在 ios7 中崩溃 mkmapview【英文标题】:sigsegv segv_accerr crash mkmapview in ios7 【发布时间】:2014-01-27 23:31:50 【问题描述】:我有一个应用程序在前台崩溃。我在根视图控制器中有一个 MKMapView。这个根视图控制器在顶部显示了一个模态视图控制器。当模态视图控制器被关闭时,在调用其 viewWillAppear 方法后,在根视图控制器中渲染 MKMapView 时似乎发生了崩溃。这发生在 ios7 中。有谁知道导致这种崩溃的原因是什么?崩溃发生在前台,和Occasionally iOS 6 MKMapView crashes in initWithFrame不一样
堆栈跟踪:
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x200000a0
Crashed Thread: 13
0 IMGSGX543GLDriver 0x2efadfd6 sgxBindCurrentTextures + 118
1 IMGSGX543GLDriver 0x2efaf143 sgxBeginRender + 399
2 IMGSGX543GLDriver 0x2efa75c3 glrClearCore + 235
3 IMGSGX543GLDriver 0x2efa73e5 glrClear + 193
4 GLEngine 0x323640c7 glClear_Exec + 395
5 VectorKit 0x37bf1531 -[VKMapModel drawScene:withContext:] + 125
6 VectorKit 0x37bf13f1 -[VKMapModel recursiveDrawScene:withContext:pass:] + 189
7 VectorKit 0x37bf12d5 -[VKModelObject recursiveDrawScene:withContext:pass:] + 237
8 VectorKit 0x37bf11e1 -[VKWorld drawScene:withContext:] + 45
9 VectorKit 0x37bf0a0d -[VKScreenCanvas _renderCore:] + 353
10 VectorKit 0x37befba7 __36-[VKScreenCanvas drawWithTimestamp:]_block_invoke_2 + 51
11 VectorKit 0x37bd527f -[VGLContext perform:] + 67
12 VectorKit 0x37befb5d __36-[VKScreenCanvas drawWithTimestamp:]_block_invoke + 113
13 libdispatch.dylib 0x3ab36d1b _dispatch_call_block_and_release + 11
14 libdispatch.dylib 0x3ab3d273 _dispatch_queue_drain$VARIANT$mp + 375
15 libdispatch.dylib 0x3ab3d06b _dispatch_queue_invoke$VARIANT$mp + 43
16 libdispatch.dylib 0x3ab3dce1 _dispatch_root_queue_drain + 77
17 libdispatch.dylib 0x3ab3dc23 _dispatch_worker_thread + 87
18 libsystem_pthread.dylib 0x3ac7ac1d _pthread_body + 141
19 libsystem_pthread.dylib 0x3ac7ab8f _pthread_start + 103
【问题讨论】:
设置一个异常断点,当它被点击时点击运行几次来打印错误信息。发布。 顺便说一句,我从来没有重现过这个崩溃——它只发生在现场,所以我没有更多的调试能力。 你在执行诸如注释分组之类的事情吗?? 看到类似的情况。想知道您是否找到了解决方案? 【参考方案1】:SIGSEV 通常意味着非法的内存寻址(nil,被破坏的对象),或者您的设备内存出现故障。如果您使用的是自定义地图图像,它们可能会太大或对设备的内存造成压力并导致其失败。一般来说,MapKit 在旧设备上不能正确处理超过 100 个点。
尝试测试不同的设备。如果它在每台设备上都失败了,那么您很可能在加载自定义图形的代码中出现错误。
如果仅在一台设备上失败,那么您的设备很可能存在问题。替换它。
【讨论】:
【参考方案2】:MKMapView 可能正在被释放,但委托仍在尝试向其发送消息,因此发生了崩溃。尝试在呈现模式时将代理设置为 nil,然后在模式关闭后将其设置回自身。
【讨论】:
以上是关于sigsegv segv_accerr 在 ios7 中崩溃 mkmapview的主要内容,如果未能解决你的问题,请参考以下文章
SIGSEGV SEGV_ACCERR 崩溃报告 - 怎么办?
当自动释放池耗尽时,NSFileAttributes dealloc 中的 SIGSEGV SEGV_ACCERR 崩溃?
一种signal 11 (SIGSEGV), code 2 (SEGV_ACCERR)的原因