2013-09-23 68 views
6

Ứng dụng của tôi đang làm việc tốt trên iOS6 nhưng nó bị rơi trên iOS 7 do truy cập xấu khi tôi thêm lớp phủ để mã MKMapView.My như sauThêm MKPolyline Overlay để MKMapView treo ứng dụng

MKPolyline *polyline = [[MKPolyline alloc] init]; 
    polyline = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps]; 
    [directionMap addOverlay:polyline]; 

enter image description here

Đây là nhật ký sự cố (LLĐB) BT *

thread #51: tid = 0x1cc5, 0x38755f8c libdispatch.dylib`dispatch_retain$VARIANT$mp + 8, stop reason = EXC_BAD_ACCESS (code=1, address=0x0) 
    frame #0: 0x38755f8c libdispatch.dylib`dispatch_retain$VARIANT$mp + 8 
    frame #1: 0x3598dbc8 VectorKit`-[VKRasterOverlayTileSource init] + 176 
    frame #2: 0x358cfd24 VectorKit`-[VKMapModel _rasterOverlayTileSourceForLevel:] + 308 
    frame #3: 0x358d0226 VectorKit`-[VKMapModel addRasterOverlay:] + 46 
    frame #4: 0x2f068dfe MapKit`-[MKOverlayContainerView _insertDrawable:forOverlay:atIndex:level:] + 1010 
    frame #5: 0x2f06752e MapKit`-[MKOverlayContainerView _configureAndAddDrawable:forOverlay:level:] + 326 
    frame #6: 0x2f0676ac MapKit`-[MKOverlayContainerView _considerAddingDrawable:inAddRect:level:] + 372 
    frame #7: 0x2f067cce MapKit`-[MKOverlayContainerView addOverlay:level:] + 246 
    frame #8: 0x001394c8 Falcon`-[GetDirectionVC showRouteFrom:to:](self=0x19742820, _cmd=0x001fa466, f=CLLocationCoordinate2D at 0x04f9ec2c, t=CLLocationCoordinate2D at 0x04f9ec1c) + 956 at GetDirectionVC.m:226 
    frame #9: 0x001390ee Falcon`-[GetDirectionVC loadLocations](self=0x19742820, _cmd=0x001fa458) + 1314 at GetDirectionVC.m:173 
    frame #10: 0x2e876e26 Foundation`__NSThread__main__ + 1062 
    frame #11: 0x38891c1c libsystem_pthread.dylib`_pthread_body + 140 
    frame #12: 0x38891b8e libsystem_pthread.dylib`_pthread_start + 102 

(LLĐB)

+0

Hãy gửi các bản ghi lỗi. –

+0

Tôi đã chỉnh sửa câu hỏi với nhật ký sự cố, vui lòng kiểm tra .Thanks –

+0

Vâng, trong tài liệu không có gì thay đổi đối với MKpolyline, nhưng phương pháp viewForOverlay đã không được chấp nhận trong iOS7.0. Hãy thử sử dụng, - (MKOverlayRenderer *) rendererForOverlay: (id < MKOverlay >) overlay thay vì phương thức viewForOverlay. –

Trả lời

18

Tôi gặp vấn đề tương tự, dấu vết ngăn xếp có vẻ gây hiểu nhầm cho tôi. Sửa lỗi của tôi là để explicitely thêm lớp phủ trên các chủ đề chính:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [mapView addOverlay:myRouteLine]; 
}); 

hoặc nếu bạn muốn sử dụng các MKOverlayRenderer mới:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [mapView addOverlay:myRouteLine level:MKOverlayLevelAboveRoads]; 
}); 

Trong trường hợp của tôi, tôi không đồng bộ tải một số dữ liệu , tạo Polylines, tạo MKOverlayViews/MKOverlayRenderes (không giúp thay thế mã không dùng nữa) và thêm lớp phủ vào bản đồ.

+1

Cảm ơn bạn !! Tôi đã tìm kiếm một giải pháp trong nhiều ngày, như bạn đã nói, phương pháp này bị treo trên các chủ đề nền trong iOS 7. – Niralp

+0

Splendid! Cảm ơn Roger – dijipiji

+0

Cảm ơn rất nhiều Roger. – kalan

1

Sử dụng sau Nếu bạn đang tạo dòng poly trong thread khác với chủ đề chính:

[self performSelectorOnMainThread:@selector(addPolyLineToMap:) withObject:polyline waitUntilDone:NO]; 

-(void)addPolyLineToMap:(MKPolyline*)apolyline{ 
    [mapview addOverlay:apolyline]; 
}