2013-06-19 18 views
5

根據入門指南添加了所有內容。加載地圖,我可以毫無問題地將GMSMarker添加到地圖中。我有一種繪製多邊形的方法,每次都會崩潰。iOS Google Map SDK在將GMSPolygon或GMSPolyline添加到地圖時發生崩潰

的方法:

-(void)drawPolygon 
{ 
    GMSMutablePath* path = [[GMSMutablePath alloc] init]; 
    [path addCoordinate:CLLocationCoordinate2DMake(-91.13343811039999, 42.6450805664)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(-91.0180969238,42.6452140808)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(-90.8977890015,42.6446838379)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(-90.89622497560001,42.6696586609)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(-90.8959732056,42.6752548218)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(-90.88994598390001,42.6732940674)]; 

    GMSPolygon* poly = [GMSPolygon polygonWithPath:path]; 

    poly.strokeWidth = 2.0; 
    poly.strokeColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0]; 
    poly.fillColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.4]; 
    poly.map = _mapView;  //CRASH!! 
} 

這裏有一個回溯:

thread #1: tid = 0x1c03, 0x0010ebde Maps`(anonymous namespace)::PolygonInstance::UpdateEntities(float, gmscore::base::reffed_ptr<gmscore::vector::Camera>, gmscore::renderer::EntityRenderer*, (anonymous namespace)::MarkupBehavior*) + 288, stop reason = EXC_BAD_ACCESS (code=2, address=0x4) 
frame #0: 0x0010ebde Maps`(anonymous namespace)::PolygonInstance::UpdateEntities(float, gmscore::base::reffed_ptr<gmscore::vector::Camera>, gmscore::renderer::EntityRenderer*, (anonymous namespace)::MarkupBehavior*) + 288 
frame #1: 0x00111f3c Maps`(anonymous namespace)::MarkupBehavior::Commit(gmscore::renderer::EntityRenderer*) + 978 
frame #2: 0x0008aad2 Maps`gmscore::renderer::EntityRenderer::Draw(bool) + 634 
frame #3: 0x000d6a46 Maps`-[GMSEntityRendererView draw] + 200 
frame #4: 0x000d5a85 Maps`-[GMSEntityRendererView displayLinkFired:] + 33 
frame #5: 0x00144399 Maps`-[GMSDisplayLink displayLinkFired:] + 351 
frame #6: 0x00f9e2d2 QuartzCore`CA::Display::DisplayLink::dispatch(unsigned long long, unsigned long long) + 110 
frame #7: 0x00f9e75f QuartzCore`CA::Display::TimerDisplayLink::callback(__CFRunLoopTimer*, void*) + 161 
frame #8: 0x02519376 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22 
frame #9: 0x02518e06 CoreFoundation`__CFRunLoopDoTimer + 534 
frame #10: 0x02500a82 CoreFoundation`__CFRunLoopRun + 1810 
frame #11: 0x024fff44 CoreFoundation`CFRunLoopRunSpecific + 276 
frame #12: 0x024ffe1b CoreFoundation`CFRunLoopRunInMode + 123 
frame #13: 0x038167e3 GraphicsServices`GSEventRunModal + 88 
frame #14: 0x03816668 GraphicsServices`GSEventRun + 104 
frame #15: 0x012bfffc UIKit`UIApplicationMain + 1211 
frame #16: 0x0000298d Maps`main(argc=1, argv=0xbffff3e0) + 141 at main.m:16 

我並不想使用MapKit的。沒有其他OpenGL上下文已經創建。任何人都可以提供一個GMSPolygon的實例嗎?我相信我的例子遵循official example

使用SDK版本1.3.1。 ARC已啓用。單視圖應用程序使用故事板。平移/縮放其他所有工作,只是沒有形狀繪製。

+0

你是從後臺線程添加多邊形嗎? –

回答

1

編輯

我有我的緯度和經度座標調換爲我建立了我的道路。

/編輯

我遇到了同樣的錯誤。我沒有從後臺線程運行它。我在多邊形的同一時間添加一個標記

marker.map = mapView_; // No problem 
    polygon.map = mapView_; // Crash 

進一步研究。

+0

任何解決方案? –

4

您是否找到了解決此問題的解決方案?我遇到了完全相同的問題,甚至使用谷歌地圖SDK for iOS代碼逐字它仍然崩潰。它崩潰下面的粗體項目:

GMSMutablePath *path = [GMSMutablePath path]; 
[path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; 
[path addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)]; 
[path addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)]; 
[path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)]; 
[path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; 

**GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];** 
rectangle.map = mapView_; 

編輯:我已經找到了這個問題的解決方案:

要解決這個問題,只是包裝您當前的代碼在調度塊。原因是,Google Maps SDK要求所有繪圖事件都在主線程上完成。下面的代碼工作正常:

dispatch_async(dispatch_get_main_queue(), ^{ 
    GMSMutablePath *path = [GMSMutablePath path]; 
    [path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)]; 
    [path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; 

    **GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];** 
    rectangle.map = mapView_; 
}); 
4

我有那麼同樣的問題,我發現這個解決辦法:

解決方法:

  1. 在Xcode中,轉至產品>方案>編輯方案...

  2. 選擇左側的「運行」選項卡。

  3. 選擇頂部的「選項」子選項卡。

  4. 將「GPU幀捕獲」從「自動啓用」或「OpenGL ES」更改爲「金屬」或「禁用」。

+0

耶!但爲什麼這個地獄?順便說一句,鏈接的文章已經死了 – Bigood

+0

你已經保存了我的一天,你值得擁有+1 – baydi