2011-07-17 9 views
5

Tôi đang cố thêm chú thích và lớp phủ vào chế độ xem bản đồ nhưng nó bị treo ngẫu nhiên. Đó là lỗi EXC_BAD_ACCESS, nhưng thây ma không nói gì với tôi cả. Nó nói nó đang bị rơi trên CG :: Path :: apply_transform (CGAffineTransform const &). Tôi đã xem xét ở khắp mọi nơi vì sao điều này xảy ra nhưng không thể xác định được nó.Ứng dụng gặp sự cố khi tôi thêm lớp phủ vào mkmapview

Tôi đang tạo bản đồ trong ib và có các đại biểu và mọi thứ được thiết lập đúng. Nó sẽ làm việc đôi khi và sau đó sụp đổ ngẫu nhiên. Tôi đang sử dụng một trình nhận dạng cử chỉ để thêm chú thích và che phủ

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(handleDoubleTap:)]; 

[doubleTap setNumberOfTapsRequired:2]; 
[self.mapView addGestureRecognizer:doubleTap]; 

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer 
{ 

    if (gestureRecognizer.state == UIGestureRecognizerStateRecognized){ 
     CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView]; 
     CLLocationCoordinate2D touchMapCoordinate = 
     [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView]; 


     //add pin where user touched down... 
     MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 
     pa.coordinate = touchMapCoordinate; 
     //[pa setTitle:@"title"]; 
     [mapView addAnnotation:pa]; 

     MKCircle* circle=[MKCircle circleWithCenterCoordinate:touchMapCoordinate radius:500]; 
     [mapView addOverlay:circle]; 


    } 

} 

Và quan điểm cho mỗi:

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay 
{ 
    if ([overlay isKindOfClass:[MKCircle class]]) { 
     MKCircleView* circleView = [[MKCircleView alloc] initWithOverlay:overlay]; 
     circleView.strokeColor = [UIColor redColor]; 
     circleView.lineWidth = 1.0; 
     circleView.fillColor = [UIColor blackColor]; 
     circleView.alpha=.5; 
     return circleView; 

    } 
    else 
     return nil; 

} 


- (MKAnnotationView *)mapView:(MKMapView *)localmapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

    if (![annotation isKindOfClass:[MKUserLocation class]]) { 
     static NSString *AnnotationIdentifier = @"Annotation"; 
     MKPinAnnotationView* pinView = (MKPinAnnotationView *)[localmapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier]; 
     if (!pinView) 
     { 
      pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier]; 
      pinView.pinColor = MKPinAnnotationColorRed; 
      pinView.animatesDrop = YES; 
     } 
     else 
     { 
       pinView.annotation = annotation; 
      } 
      return pinView; 

     } 
     return nil; 
} 

Có cách nào tốt hơn để thêm chú thích/lớp phủ cho bản đồ với tương tác của người dùng? Tôi có làm gì sai trong mã này không? Nó xuất hiện để vẽ hầu hết các vòng tròn nhưng sau đó treo ... Có một số thủ thuật đặc biệt để mapviews?

+0

Đối với những gì giá trị của nó, tôi có gần như chính xác cùng một mã và tôi đang gặp chính xác cùng một vụ tai nạn liên tục.Nó chắc chắn gây ra bởi MKMapView addOverlay: và dường như xảy ra vào những lúc tùy ý. Nó không được liên kết với số lớp phủ được thêm vào. Nếu bạn giải quyết vấn đề, vui lòng thêm câu trả lời ở đây và tôi sẽ làm như vậy. – Undistraction

+0

Bài đăng của 1ndivisible tại đây (http://stackoverflow.com/questions/8266950/debugging-crash-in-coregraphics-mapkit) bao gồm cùng một sự cố này. Tính năng này cụ thể là 5.0. – cbowns

+0

Tôi nghĩ rằng tôi đang gặp lỗi này nhưng cũng thấy thông báo này: "lỗi: địa chỉ không chứa phần trỏ đến một phần trong tệp đối tượng" –

Trả lời

-4

Tôi không chắc chắn vấn đề EXC_BAD_ACCESS của bạn ở đâu. Nhưng bạn có một vấn đề lớn với bộ nhớ bị rò rỉ. Bạn phải releas đối tượng mà bạn tạo với init. Trong đoạn mã trên bạn tạo các đối tượng và không bao giờ giải phóng chúng. Điều đó sẽ không ném EXC_BAD_ACCESS nhưng nó sẽ tiêu thụ bộ nhớ của bạn.

Thả các đối tượng sau đây:

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 

MKCircleView* circleView = [[MKCircleView alloc] initWithOverlay:overlay]; 
+2

Dự án đang sử dụng ARC. Vì vậy, tôi không chịu trách nhiệm giải phóng chúng. – utahwithak

4

Tôi đã nhận được cùng một lỗi chính xác:

CG :: Đường dẫn :: apply_transform (CGAffineTransform const &) sẽ tung ra một hướng dẫn kiểm tra và cho tôi một EXC_BAD_ACCESS

Điều này đặc biệt xảy ra khi sử dụng nhấp đúp vào bản đồ để phóng to trên MKCircle.

Tôi không thể nói điều này một cách dứt khoát, nhưng theo hiểu biết tốt nhất, sự cố này chỉ xảy ra trên trình mô phỏng khi bạn sử dụng nhấp đúp để thu phóng, tôi chưa bao giờ có thể gây ra lỗi từ thiết bị thực, hoặc bằng cách sử dụng tùy chọn + nhấp để phóng to trình mô phỏng.

Vì vậy, tại thời điểm này tôi đã đệ trình điều này trong "lỗi trình mô phỏng" và để nó ở đó.

Nếu bạn phát hiện bất kỳ điều gì ngược lại, hãy cho tôi biết vì nó thực sự làm phiền tôi không biết rõ đây có phải là lỗi hiện có trong ứng dụng của tôi mà tôi không thể tái tạo đúng cách không.

chỉnh sửa:

Điều này được gắn cờ ban đầu là "không phải là câu trả lời" vì vậy tôi sẽ cung cấp thêm một chút thông tin hỗ trợ phỏng đoán của tôi.

Về cơ bản trong cả hai trường hợp, cử chỉ đang kích hoạt lại hình ảnh của MKCircleView, điều tôi nghi ngờ là vì trình mô phỏng có thể tạo ra một số cử chỉ không thể tạo từ người dùng trên thiết bị thực tế, có một kỳ vọng không thành công ở đâu đó trong chuỗi trong khi cử chỉ đó được xử lý.

+0

@yelirekim Bạn đã giải quyết vấn đề này chưa? Tôi có chính xác cùng một vấn đề, mặc dù nó đang xảy ra trên cả hai mô phỏng và thiết bị. – Undistraction