我已經構建了一個旨在顯示某些疊加層的應用程序。覆蓋層的形式是多邊形,外圈最多可達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