首页 文章

iOS在CoreFoundation中的CFStringGetLength崩溃

提问于
浏览
6

我遇到了一个崩溃,对我来说,好像这是一个苹果正在处理MKMapView的 goToDefaultLocation 消息的方式的错误 . 该消息依次调用 [ALCityManager localeWithCode:] ,调用 [NSLocale componentsFromLocaleIdentifier:] ,调用 CFLocaleCreateComponentsFromLocaleIdentifier ,调用 CFStringGetLength 并发生崩溃 .

有人可以帮我指出修复错误的方向,如果是我的代码导致这个,或者,帮助我找到一个解决方法,实际上,这是Apple的代码中的错误(不太可能?) .

崩溃日志如下:

Incident Identifier: 84198BB6-45BD-493B-955F-75CCB5246DDD
CrashReporter Key:   7dbf53bf1f1a3635d7c3c49e726dedc609ed9f3a
Hardware Model:      iPhone3,1
Process:         MyApp [340]
Path:            /var/mobile/Applications/DCE9A5A1-8E24-4D4F-A1ED-9855C6CA1742/MyApp.app/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-03-25 10:36:06.382 -0700
OS Version:      iPhone OS 4.3 (8F190)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreFoundation                  0x00009a66 CFStringGetLength + 6
1   CoreFoundation                  0x0002f994 CFLocaleCreateComponentsFromLocaleIdentifier + 60
2   CoreFoundation                  0x000483b8 +[NSLocale componentsFromLocaleIdentifier:] + 12
3   AppSupport                      0x00016eee -[ALCityManager localeWithCode:] + 130
4   MapKit                          0x00038488 -[MKMapView goToDefaultLocation] + 80
5   Foundation                      0x000907c6 __NSFireTimer + 130
6   CoreFoundation                  0x00075a40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
7   CoreFoundation                  0x00077ec4 __CFRunLoopDoTimer + 844
8   CoreFoundation                  0x0007883e __CFRunLoopRun + 1082
9   CoreFoundation                  0x00008ebc CFRunLoopRunSpecific + 224
10  CoreFoundation                  0x00008dc4 CFRunLoopRunInMode + 52
11  GraphicsServices                0x00004418 GSEventRunModal + 108
12  GraphicsServices                0x000044c4 GSEventRun + 56
13  UIKit                           0x0002ed62 -[UIApplication _run] + 398
14  UIKit                           0x0002c800 UIApplicationMain + 664
15  MyApp                               0x000023f0 main (main.m:34)
16  MyApp                               0x00002370 start + 44

2 回答

  • 2

    我得到了完全相同的崩溃报告,仅适用于iOS 4.3 / 4.3.1和iPhone 3GS / 4(armv7)

    我认为这是一个Apple Bug,iOS4.3还有其他关于MapKit的丑陋回归 . (就像 MKReverseGeocoder 早期发布的崩溃......)

    • 一个简单的解决方法是覆盖 -[MKMapView goToDefaultLocation] ,但是由于它是一个私有API而面临苹果拒绝的风险......(拒绝了一个错误的解决方法......我知道......人们是卑鄙的)

    • 另一个解决方案是分析(反向...)CFLocaleCreateComponentsFromLocaleIdentifiercomponentsFromLocaleIdentifier:以及 [ALCityManager localeWithCode:] 以了解它是如何崩溃的,使用 nil 区域设置标识符调用并可能以编程方式修复应用程序区域设置,因为它看起来像是来自确定用户的区域设置的错误从设备设置(或更糟糕的是,来自城市/地理位置)...或至少WARN用户,其区域设置可能会导致麻烦...我不能(/想要)做的事情,无法重现该错误 .

  • 1

    那你的异常代码是 EXC_BAD_ACCESS . 这通常是内存管理错误(即一些代码试图访问已经释放/解除分配的对象) .

    这可能是但不太可能是Apple /框架代码中的错误 . 更有可能的是,代码中的某个位置要么过度释放某些内容,要么挂在自动发布的对象实例上,或者访问不应该访问的内容 .

    鉴于崩溃发生在MapKit中,我发现在尝试访问LocationManager的情况下发生了崩溃,并且期望这样的情况失败(例如,通过返回 nil 位置),但不会使应用程序崩溃 .

相关问题