1

我需要在两个注释引脚之间的 MKMapview 中添加路径。ios 5 或更早版本没有问题,但是当我尝试在 ios 6 中运行应用程序时,应用程序出人意料地退出了。下面是我的代码。如果我的代码中有任何更正,请建议我。

1.所以我的问题是建议如何在我的以下代码中确定内存的最佳方法,以便我可以解决我的应用程序中的崩溃。

- (void)viewDidLoad 
{
NVPolylineAnnotation *annotation = [[NVPolylineAnnotation alloc] initWithPoints:pathArray mapView:_mapView];
[_mapView addAnnotation:annotation];
        [annotation release];
        [pathArray removeAllObjects];
}



- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id  <MKAnnotation>)annotation
{
    NSLog(@"%s",__FUNCTION__);
if ([annotation isKindOfClass:[NVPolylineAnnotation class]]) 
{
    NSLog(@"=========ANOTATION=========NVPolylineAnnotationView START");

    //ann=[ann initWithAnnotation:annotation mapView:_mapView];
    NVPolylineAnnotationView *ann=[[NVPolylineAnnotationView alloc] init];
    return [[ann initWithAnnotation:annotation mapView:_mapView]     autorelease];//[[[NVPolylineAnnotationView alloc] initWithAnnotation:annotation    mapView:_mapView] autorelease];

}
else if([annotation isKindOfClass:[MapViewAnnotation class]])
   {

        MKPinAnnotationView *annView=[[MKPinAnnotationView alloc]     initWithAnnotation:annotation reuseIdentifier:@"pointers"] ;
//      annView.rightCalloutAccessoryView = [UIButton buttonWithType:    UIButtonTypeDetailDisclosure];
       annView.animatesDrop=NO;
       annView.canShowCallout = TRUE;
      return [annView autorelease];
}
   else if([annotation isKindOfClass:[PlacePin class]])
   {
       {
        MKPinAnnotationView *pinView = nil; 
        if(annotation != mapView.userLocation) 
           {
            static NSString *defaultPinID = @"com.invasivecode.pin";
            pinView = (MKPinAnnotationView *)[mapView    dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
            if ( pinView == nil ) 
                pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation    reuseIdentifier:defaultPinID] autorelease];
            pinView.pinColor = MKPinAnnotationColorGreen;
            pinView.canShowCallout = YES;
            pinView.animatesDrop = NO;
            } 
            else {
            [mapView.userLocation setTitle:@"I am here"];
           }
        return pinView;
       }
}

return nil;
}


 - (void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
 {

   NSLog(@"%s",__FUNCTION__);

// fixes that some marker are behind the polyline
    for (int i=0; i<[views count]; i++) 
    {
    MKAnnotationView *view = [views objectAtIndex:i];
    if ([view isKindOfClass:[NVPolylineAnnotationView class]]) 
    {
        [[view superview] sendSubviewToBack:view];

        /* In iOS version above 4.0 we need to update the polyline view     after it
         has been added to the mapview and it ready to be displayed. */
        NSString *reqSysVer = @"4.0";
        NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
        if ([currSysVer compare:reqSysVer options:NSNumericSearch] !=     NSOrderedAscending) 
        {
            [self updatePolylineAnnotationView];
        }
    }
}
NSLog(@"----------didAddAnnotationViews");
 }

- (void)updatePolylineAnnotationView 
{
NSLog(@"%s",__FUNCTION__);



 MKAnnotationView *annotationView = [views objectAtIndex:0];
 id <MKAnnotation> mp = [annotationView annotation];
 [mapView selectAnnotation:mp animated:NO];
 */
for (NSObject *a in [_mapView annotations]) 
{
    if ([a isKindOfClass:[NVPolylineAnnotation class]]) 
    {
        NVPolylineAnnotation *polyline = (NVPolylineAnnotation *)a;

        NSObject *pv = (NSObject *)[_mapView viewForAnnotation:polyline];
        if ([pv isKindOfClass:[NVPolylineAnnotationView class]]) 
        {
            NVPolylineAnnotationView *polylineView =
            (NVPolylineAnnotationView *)[_mapView viewForAnnotation:polyline];



            [polylineView regionChanged];

        }
    }       
}
}
4

0 回答 0