2013-06-19 39 views
5

Đã thêm mọi thứ theo hướng dẫn Bắt đầu. Tải bản đồ và tôi có thể thêm GMSMarker giây vào bản đồ mà không gặp sự cố. Tôi đã có một phương pháp để vẽ một đa giác, và các ứng dụng treo mỗi lần.iOS Google Map SDK Crash khi thêm GMSPolygon hoặc GMSPolyline vào Bản đồ

Phương pháp:

-(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!! 
} 

Dưới đây là một vết lùi:

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 

Tôi không cố gắng sử dụng MapKit ở tất cả. Không có ngữ cảnh OpenGL nào khác được tạo. Bất cứ ai có thể cung cấp cho tôi một ví dụ làm việc của GMSPolygon? Tôi tin rằng ví dụ của tôi theo sau official example.

Sử dụng phiên bản SDK 1.3.1. ARC được bật. Ứng dụng xem một lần bằng Bảng phân cảnh. Pan/Zoom mọi thứ khác hoạt động, chỉ cần không vẽ hình.

+0

Bạn có thêm đa giác từ chuỗi nền không? –

Trả lời

1

Chỉnh sửa

Tôi đã có vĩ độ và kinh độ được chuyển đổi khi tôi xây dựng đường dẫn của mình.

/Chỉnh sửa

Tôi đã gặp phải lỗi tương tự. Tôi không chạy nó từ một chủ đề nền. Tôi thêm điểm đánh dấu cùng lúc với đa giác

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

Nghiên cứu thêm.

+0

bất kỳ giải pháp nào cho điều này? –

4

Bạn đã tìm thấy giải pháp cho vấn đề này chưa? Tôi gặp vấn đề tương tự chính xác và thậm chí sử dụng nguyên tắc mã Google Maps SDK cho iOS vẫn còn nguyên. Nó đâm vào mục in đậm dưới đây:

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: Tôi đã tìm thấy giải pháp cho hành vi này:

Để khắc phục vấn đề này, chỉ cần quấn mã hiện tại của bạn trong một khối văn. Lý do là, Google Maps SDK yêu cầu tất cả các sự kiện vẽ phải được thực hiện trên chuỗi chính. Mã dưới đây hoạt động đúng:

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

Tôi đã có cùng một vấn đề thì tôi thấy cách giải quyết này:

Cách giải quyết:

  1. Trong XCode, đi đến sản phẩm> Scheme> Edit Scheme ...

  2. Chọn tab "Chạy" ở bên trái.

  3. Chọn tab phụ "Tùy chọn" ở trên cùng.

  4. Thay đổi "Chụp khung GPU" từ "Tự động bật" hoặc "OpenGL ES" thành "Kim loại" hoặc "Đã tắt".

+0

Yay! Nhưng tại sao địa ngục?Btw, bài viết liên kết đã chết – Bigood

+0

Bạn đã lưu ngày của tôi. Bạn xứng đáng +1 – baydi

Các vấn đề liên quan