2012-08-30 61 views
1

我有一个奇怪的崩溃发生在我的应用程序 首先,我会让你一目了然的应用程序,有一个包含许多注释的地图,我也定制了这些标注注释是包含按钮和许多信息的视图,它包含一个按钮,有一个动作到另一个选项卡中的应用程序,它被称为DisclosureButton Where updating the map更改mkmapview(删除注释)

the action of the DisclosureButton

我添加了一个断点例外该项目,所以我得到了应用程序崩溃的地方,你可以在173线上看到它正如您在上面的控制台中看到的那样,view.annotation为null,因此注释在某个时刻被删除。在检查线程1(主线程,您可以在下面看到)执行的操作后,我发现在从映射中移除注释的同时,将执行披露按钮操作。为什么主线程停止执行updateMap方法并启动披露按钮的操作?这就是控制台首先显示的内容“在删除注释之前”,然后日志在揭示按钮的动作中没有记录“在创建注释之前”,这是非常奇怪的事情,我不确定此时发生了什么? stackTrace of mainThread

我不知道发生了什么,任何建议/评论/援助,将不胜感激提前

感谢,

+0

我得到这个,以及iOS 6,但不是iOS 5.注解添加到map.annotations并在它被访问之前为null。 –

+0

我得到它在iOS 5,上面的代码在主线程上执行,这里的东西是当主线程执行“removeAnnotation”方法,当我按下揭示按钮时,我在标注中的主线程停止removeAnnotation方法并去执行按钮的动作,这是这里的问题! – Maystro

回答

0

我想我有同样的问题。我的后台线程添加/删除了注释,但注释中的按钮将添加到主线程中。这也意味着主线程对注释进行枚举(出于某种原因)。我通过在主线程中添加来修复它。

问题只存在在iOS 6

我不知道你的例外是什么,但我的是:

*收藏< __NSArrayM:0x136d57c0>中同时列举了突变。

0 CoreFoundation      0x0330e02e __exceptionPreprocess + 206 
1 libobjc.A.dylib      0x02735e7e objc_exception_throw + 44 
2 CoreFoundation      0x03396cc5 __NSFastEnumerationMutationHandler + 165 
3 MapKit        0x0231748c -[MKAnnotationContainerView _updateAnnotationViewPerspective] + 399 
4 MapKit        0x02305520 -[MKMapView _updateScrollContainerView:] + 2478 
5 MapKit        0x02303e10 -[MKMapView _didChangeRegionMidstream:] + 97 
6 MapKit        0x02305d66 -[MKMapView _goToMapRegion:duration:animationType:] + 828 
7 MapKit        0x023061bd -[MKMapView _setZoomScale:centerMapPoint:duration:animationType:] + 711 
8 MapKit        0x02305a24 -[MKMapView _setZoomScale:centerCoordinate:duration:animationType:] + 121 
9 MapKit        0x02307f8f -[MKMapView _goToCenterCoordinate:zoomLevel:animationType:cancelDefaultLocationTimer:] + 950 
10 MapKit        0x023075fb -[MKMapView goToCenterCoordinate:zoomLevel:animationType:] + 81 
11 MapKit        0x023076c9 -[MKMapView goToCenterCoordinate:longLatSpan:animationType:] + 178 
12 MapKit        0x0230992a -[MKMapView goToDefaultLocation] + 415 
13 Foundation       0x009a0b90 __NSFireTimer + 97 
14 CoreFoundation      0x032cd376 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22 
15 CoreFoundation      0x032cce06 __CFRunLoopDoTimer + 534 
16 CoreFoundation      0x032b4a82 __CFRunLoopRun + 1810 
17 CoreFoundation      0x032b3f44 CFRunLoopRunSpecific + 276 
18 CoreFoundation      0x032b3e1b CFRunLoopRunInMode + 123 
19 GraphicsServices     0x03c557e3 GSEventRunModal + 88 
20 GraphicsServices     0x03c55668 GSEventRun + 104 
21 UIKit        0x00d3465c UIApplicationMain + 1211 
22 myApp        0x00002c93 myApp + 7315 
23 myApp        0x00002bd5 myApp + 7125 
1

iOS 6的喜欢爆标注在地图上,谁知道这是为什么。我的解决方案是只保留所有类中的注释,并处理内存。目前它正在工作,但它不会让原生mapKit处理它...不确定是否应该看一个新的WWDC视频或将一个页面添加到MKMap编程文档中,但现在可以使用。

+0

我正在使用相同的方法。在iOS 6 apdate之后,我的基于地图的应用程序变得一团糟。 – Trein