MKMapView addAnnotation сбой с EXC_BAD_ACCESS - PullRequest
5 голосов
/ 01 июля 2011

Здравствуйте, я вижу эту странную проблему, я заполняю свою собственную пользовательскую аннотацию для mkmapview в цикле for, после запуска цикла for в 54 раза, то есть в 55 раз, когда я делаю в этой строке addannotation mkmapview, он выдает здесь EXC_BAD_ACCESSявляются кодом

- (void)viewDidLoad {

[super viewDidLoad];
[mkMapView setMapType:MKMapTypeStandard];
[mkMapView setZoomEnabled:YES];
[mkMapView setShowsUserLocation:YES];
[mkMapView setScrollEnabled:YES];

MKCoordinateRegion region;
region.center.latitude = currentLocation.latitude;
region.center.longitude = currentLocation.longitude;
MKCoordinateSpan span;
span.latitudeDelta = 0.03;
span.longitudeDelta = 0.03;
region.span = span;
[mkMapView setRegion:region animated:TRUE]; 
[mkMapView setDelegate:self];


int i =0;
for(MyObject* myObject in myObjectArray)
{
    NSLog(@"%d", i);
    if(i == 55){
        NSLog(@"%@", myObject);
    }
    i++;
    NSString *maintitle = myObject.name;
    NSString *subtitle = myObject.address;

    CLLocationCoordinate2D newCoordinate = { [myObject.latitude doubleValue], [myObject.longitude doubleValue] };
    Annotation *pinAnnotation = [[Annotation alloc]initWithCoordinate:newCoordinate title:maintitle subtitle:subtitle image:NULL];
    [mkMapView addAnnotation: pinAnnotation];
    [pinAnnotation release];
}
}

 - (void)dealloc {
mkMapView.delegate = nil;
[mkMapView release];
mkMapView = nil;
[myObjectArray release];
myObjectArray = nil;
[super dealloc];
 }

Вот код для Annotation.h

 @interface Annotation : NSObject <MKAnnotation>{
 CLLocationCoordinate2D    coordinate;
 NSString * title;
 NSString * subtitle;
 UIImage * image;
 }

 @property (nonatomic, readwrite, assign) CLLocationCoordinate2D    coordinate;
 @property (nonatomic, retain) NSString * title;
 @property (nonatomic, retain) NSString * subtitle;
 @property (nonatomic, retain) UIImage * image;

 - (id) initWithCoordinate:(CLLocationCoordinate2D) coordinate title:(NSString*) title subtitle:(NSString*) subtitle image:(UIImage*) image;

@end

Вот код для Annotation.m

 - (id) initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString*) title subtitle: (NSString*) subtitle image:(UIImage*) image{
self = [super init];
if(self){
self.coordinate = coordinate;
self.title = title;
self.subtitle = subtitle;
self.image = image;
}

return self;
}

-(void) dealloc{
[title release];
[subtitle release];
[image release];
[super dealloc];
}

вот здесь трассировка стека

0 MYAPP 0x00099c6a + [обратная трассировка TFCrashHandler] + 46

1 MYAPP 0x0009a007 TFSignalHandler + 45

2 libSystem.B.dylib 0x9455345b _sigtramp + 43 * 101 * * *???0xffffffff 0x0 + 4294967295 * 1 018 *

4 MapKit 0x015f5124 - [MKQuadTrie содержит:] + 40

* +1021 * 5 MapKit 0x0156363c - [MKAnnotationContainerView addAnnotation:] + 356 * 1 022 * * +1023 * 6 MapKit 0x01538807 - [MKMapViewaddAnnotation:] + 115

1 Ответ

12 голосов
/ 21 января 2012

Убедитесь, что все аннотации, которые вы пытаетесь добавить, имеют правильные координаты, поскольку это является распространенным источником сбоев при добавлении их в MKMapView.

Широты должны быть в диапазоне от -90 до 90, а долготы должныбыть между -180 и 180.

...