我有一个MKMapView,可以(在垂直方向)扩展(使用UITapGestureRecognizer)并在pan上激活api调用(使用UIPanGestureRecoginizer)。
一切正常,直到一段时间回来,在平移的地方,应用程序会崩溃,几乎没有任何有用的信息(或我能理解的信息)
已启用异常断点,并且已启用僵尸对象。在崩溃时,它永远不会遇到异常断点!
这里是日志: (平移开始,平移,平移结束根据Pan gestureRecognizer状态打印出来)。 在平移结束后,应用程序崩溃了。 (地图尚未加载其所有切片,并且尚未调用regionDidChangeAnimated):
2013-01-17 14:46:04.396 MyApp[13126:c07] Panning Began
2013-01-17 14:46:04.412 MyApp[13126:c07] Panning
2013-01-17 14:46:04.412 MyApp[13126:c07] Panning
2013-01-17 14:46:04.557 MyApp[13126:c07] Panning
2013-01-17 14:46:04.606 MyApp[13126:c07] Panning
2013-01-17 14:46:04.691 MyApp[13126:c07] Panning Ended
2013-01-17 14:46:04.692 MyApp[13126:c07] *** -[MKMapViewPositioningChange hasChanges]: message sent to deallocated instance 0x139f7520
这是我在崩溃后看到的回溯:
(lldb) bt
* thread #1: tid = 0x1c03, 0x02a4fa97 CoreFoundation`___forwarding___ + 295, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
frame #0: 0x02a4fa97 CoreFoundation`___forwarding___ + 295
frame #1: 0x02a4f94e CoreFoundation`_CF_forwarding_prep_0 + 14
frame #2: 0x01244d27 MapKit`-[MKMapView(UserPositioningInternal) _runPositioningChange] + 2037
frame #3: 0x01242dd7 MapKit`-[MKMapView(UserPositioningInternal) _runPositioningChangeIfNeeded:] + 86
frame #4: 0x01240220 MapKit`-[MKMapViewInternal runPositioningChangeIfNeeded] + 50
frame #5: 0x01e2eb90 Foundation`__NSFireTimer + 97
frame #6: 0x02a1f376 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
frame #7: 0x02a1ee06 CoreFoundation`__CFRunLoopDoTimer + 534
frame #8: 0x02a06a82 CoreFoundation`__CFRunLoopRun + 1810
frame #9: 0x02a05f44 CoreFoundation`CFRunLoopRunSpecific + 276
frame #10: 0x02a05e1b CoreFoundation`CFRunLoopRunInMode + 123
frame #11: 0x03c897e3 GraphicsServices`GSEventRunModal + 88
frame #12: 0x03c89668 GraphicsServices`GSEventRun + 104
frame #13: 0x0132d65c UIKit`UIApplicationMain + 1211
frame #14: 0x0001223d MyApp`main + 141 at main.m:16
frame #15: 0x00002fc5 MyApp`start + 53
当我为PanGestureRecognizer操作方法建立连接时,崩溃就会消失。
使用手势识别器时有没有办法摆脱这种崩溃?或者有没有办法知道地图被点击和平移,而不使用GestureRecognizers?
感谢任何帮助/问题/答案/评论!
更新(1月19日):这根本不是泛手势识别器的问题。在我尝试向mapview添加新注释,调用[MapView setRegion:animated:]并在命中regionDidChangeAnimated之前崩溃时,我正在崩溃,在崩溃点处使用相同的[MKMapViewPositioningChange hasChanges]日志
更新(1月23日):我想我很确定会发生什么事。有一块代码尝试将区域设置为包含MKMapView的可见矩形中的所有注释,以及其他一些位置,我调用[myMapView removeAnnotations:[myMapView annotations]]。并且,我的猜测是,这两个动作最终导致了一次令人讨厌的空中碰撞,并没有留下导致撞车事故的痕迹。如果我的hunch-fix通过QA
,将用答案更新问题答案 0 :(得分:3)
正如我之前猜到的那样(问题的第二次更新),这是尝试添加集地图区域以显示所有注释并同时删除所有注释的问题。如果你正在调用setRegion:animated :,请确保检查mapView是否至少有一个注释。
此外,明智地使用以下代码将会很有帮助,特别是如果您根据注释在地图上执行任何类型的动画。
[MKMapView removeAnnotations:[MKMapView annotations]];