我已经构建了一个旨在显示某些叠加层的应用程序。覆盖层的形式是多边形,外圈最多可达10000个点。但这里的高点似乎不成问题。在过去的几天里,我一直在简化我的应用程序,以便找到一个包含MapView的简单View。视图从xib加载(连接插座和代理)。覆盖层是在方法中创建的 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)动画并添加到mapView中。iOS 5 MapKit在缩放/平移时使用叠加层崩溃
演示(可在此处获得https://github.com/nebucaz/mapkit)显示MapView,并在地图放大/缩小或平移时添加红色三角形。当玩弄缩放和平移(密集和快速)MapView时,应用程序崩溃。对模拟器进行字符编码很容易,在设备上尽管可能会更困难(我可以提供崩溃日志)。
有两个演示:MapCrash和MapCrashStatic。第一个在地图周围创建多个多边形,具体取决于一个平移/缩放的位置。第二只具有在创建一个单一的,静态的多边形 - (无效)viewDidLoad中,然后在MapView类的每个呼叫被添加regionDidChangeAnimated
应用总是与以下回溯崩溃:
Attaching to process 8745.
MapCrash(8745) malloc: protecting edges
[Switching to process 8745 thread 0x1820b]
[Switching to process 8745 thread 0x1820b]
(gdb) backtrace
#0 0x00000000 in ??()
#1 0x00e81a60 in CG::Path::apply_transform()
#2 0x00ed741c in CGPathCreateMutableCopyByTransformingPath()
#3 0x00f50d23 in CGContextAddPath()
#4 0x000f11dc in MKRoadWidthAtZoomScale()
#5 0x000ee498 in MKMapRectRemainder()
#6 0x000fab01 in MKTilesRequireGoogleLegalNotices()
#7 0x02723c17 in -[CALayer drawInContext:]()
#8 0x027407e3 in tiled_layer_render()
#9 0x0265b127 in CAImageProviderThread()
#10 0x01eb04e6 in _dispatch_worker_thread2()
#11 0x98f44b24 in _pthread_wqthread()
#12 0x98f466fe in start_wqthread()
(gdb)
回溯是总是一样,它在库代码中的同一点崩溃。我用仪器(僵尸,泄漏,分配)进行了分析,并对过度保留的对象进行了一些测试。我认为这是一个记忆问题,但我还没有能够启动Malloc Guard。崩溃可能会在多台机器上重现 - 即使很难,我只需重新安装Xcode工具。
stackoverflow.com上的其他帖子也处理突发崩溃在MapKit,但要么提供没有直接的解决方案,我的问题或不得不处理委托和其他视图转换或应用程序启动/停止问题。 ARC在我的项目中关闭。
- Navigation and MapKit makes app crash
- IOS - Mapkit crash - Is it a bug in xcode 4.2 and Automatic Reference Counting (ARC)?
- MKMapView crash(注释)
- I need help with a MKMapView crash(代表)
我现在打猎这个崩溃的一个多星期,仍然假设我曲解了KMLViewer演示(苹果)或做错事(向我附近的其他iOS开发者发放信用卡!)
不过,我很感谢您的建议和对此事的帮助。
只是为了与我的几个美分价值,我目前有完全相同的问题。我有一个NSMutableArray包含支持MKOverlay协议的对象列表。如果可变数组中的对象被移除,它也会从mapview中移除。但是,当我重复缩放发生以下堆栈跟踪: – Diziet
'不能访问内存地址0x1 (gdb)其中 #0 0x00000001在? () #1 0x011a741c在CGPathCreateMutableCopyByTransformingPath() #2 0x01220d23在CGContextAddPath() #3 0x003be3e1在MKMapRectRemainder() #4 0x003be498在MKMapRectRemainder() #5 0x003cab01在MKTilesRequireGoogleLegalNotices() #6 0x029f3c17在 - [CALayer的drawInContext:]() #7 0x02a107e3在tiled_layer_render() #8 0x0292b127在CAImageProviderThread() #9 0x021804e6在_dispatch_worker_thread2() #10 0x9c981b24在_pthread_wqthread() #11 0x9c9836fe在start_wqthread() ' – Diziet
感谢@ Diziet分享。我上周在Apple Developer Network开了一个TSI,然后被要求提交一个bug。我被告知目前没有可用的解决方法,并且该错误将被调查。我会发表进一步的评论。 – Snel