1

目前我正在测试一个几乎完成的应用程序。一般来说,它运作良好。

但是我已经看到,当我在使用 MapKit 和 CoreLocation 的视图控制器和仅显示一些简单按钮的普通视图控制器之间快速切换时,应用程序正在崩溃(可重现,但在随机时间)。

崩溃发生在返回普通 VC 后。如此快速的变化不是用户通常的使用场景,我这样做只是因为测试太无聊了 ;-) - 但现在我知道某处有错误。

有没有人有想法,在哪里看?请参阅下面设备的错误报告 - 它看起来总是一样的。Xcode 中的错误消息是不同的,但总是带有无法识别的选择器。顺便提一句。我不使用必须来自框架的 performSelector:withObject:。

我倾向于猜测,当从这个 VC 快速返回时,有一些来自 MKMapView 或 CoreLocation 的内部初始化任务没有完成,这些是导致问题的原因吗?

Xcode 中的错误消息:

2012-08-25 17:26:20.375 Kanal01[4070:707]-[__NSCFArray mapView:didUpdateUserLocation:]:无法识别的选择器发送到实例 0x10b030
2012-08-25 17:26:20.384 Kanal01[4070:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray mapView:didUpdateUserLocation:]: unrecognized selector sent to instance 0x10b030'
*** First throw call stack: (0x374fa88f 0x351ff259 0x374fda9b 0x374fc915 0x37457650 0x36f13e63 0x374591fb 0x37495ab9 0x36f09b21 0x36badde3 0x36bad785 0x36ba7e4f 0x374ceb01 0x374ce12f 0x374cd351 0x374504a5 0x3745036d 0x33c0f439 0x311fccd5 0xa9eed 0xa9e88) 终止调用抛出异常

设备日志内容:

异常类型:EXC_BAD_ACCESS (SIGSEGV)
异常代码:0x00000000 处的 KERN_INVALID_ADDRESS
线程崩溃:0

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x36fe8f7e 0x36fe5000 + 16254
1 MapKit 0x337b9e5c 0x3378b000 + 192092
2 CoreFoundation 0x30c0f1f4 0x30bf7000 + 98804
3 CoreFoundation 0x30c4bab2 0x30bf7000 + 346802
4 MapKit 0x337afb1a 0x3378b000 + 150298
5 CoreLocation 0x33ccaddc 0x33cc2000 + 36316
6 CoreLocation 0x33cca77e 0x33cc2000 + 34686
7 CoreLocation 0x33cc4e48 0x33cc2000 + 11848
8 CoreFoundation 0x30c84afa 0x30b46f700
9 CoreFoundation 0x30c84128 0x30bf7000 + 577832
10 CoreFoundation 0x30c8334a 0x30bf7000 + 574282
11 CoreFoundation 0x30c0649e 0x30bf7000 + 62622
12 CoreFoundation 0x30c06366 0x30bf7000 + 62310
13 GraphicsServices 0x32c80432 0x32c7c000 + 17458
14 UIKit 0x30369cce 0x30338000 + 203982
15 Kanal01 0x00069fde 0x68000 + 8158
16 Kanal01 0x00069f78 0x68000 + 8056

4

0 回答 0