Reputation: 266
Added everything according to the Getting Started guide. Map loads, and I can add GMSMarker
s to the map without problem. I've got a method to draw a polygon, and the app crashes every time.
The method:
-(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!!
}
Here's a backtrace:
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
I'm not trying to use MapKit at all. No other OpenGL contexts have been created. Can anyone provide me with a working example of GMSPolygon? I believe my example follows the official example.
Using SDK version 1.3.1. ARC is enabled. Single-View app using Storyboards. Pan/Zoom everything else works, just not shape drawing.
Upvotes: 5
Views: 3211
Reputation: 2638
I was led to this question and I had the following problem that I fixed
let path = GMSMutablePath()
path.add(startCo)
path.add(endCo)
let color = UIColor.black
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 3
polyline.strokeColor = color
let styles = [GMSStrokeStyle.solidColor(color),
GMSStrokeStyle.solidColor(.clear)]
let lengths: [NSNumber] = [6.0, 6.0]
polyline.spans = GMSStyleSpans(polyline.path!, styles, lengths, .rhumb)
The issue was that lengths
being [6.0, 6.0]
if the line is very long that will take up too much memory and kill the app. those values need to be proportional to the line length. not all lines are straight, take the min max of your line and adjust the lengths to whatever you see fit. Google's example is 10000, 5000 so whoever set this one up is operating at a very small scale.
Upvotes: 0
Reputation: 893
I was having the same issue then I found this workaround:
The workaround:
In XCode, go to Product > Scheme > Edit Scheme...
Select the "Run" Tab on the left.
Select the "Options" sub-tab on the top.
Change "GPU Frame Capture" from "Automatically Enabled" or "OpenGL ES" to either "Metal" or "Disabled".
Upvotes: 4
Reputation: 1424
Have either of you found a solution to this issue? I am having the exact same problem, and even using the Google Maps SDK for iOS code verbatim it is still crashing. It crashes on the bolded item below:
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_;
EDIT: I have found the solution for this behavior:
To correct the issue, simply wrap your current code in a dispatch block. Reason being, Google Maps SDK requires that all drawing events be done on the main thread. The below code works properly:
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_;
});
Upvotes: 4
Reputation: 41
Edit
I had my latitude and longitude coordinates transposed as I built my path.
/Edit
I have encountered the same bug. I am not running it from a background thread. I add a marker at the same time as the polygon
marker.map = mapView_; // No problem
polygon.map = mapView_; // Crash
Researching further.
Upvotes: 2