Аннотации iOS MapKit добавлены не все

#ios #objective-c #parse-platform #mapkit #mapkitannotation

#iOS #objective-c #синтаксический анализ-платформа #MapKit #mapkitannotation

Вопрос:

В моем приложении я получаю широту и долготу вместе с некоторыми другими данными из запроса синтаксического анализа. Однако добавляется только около 100 аннотаций, когда их должно быть 156. Я проверяю в консоли, что он получает координаты недостающих фрагментов на карте, он просто не добавляет для них аннотацию. Я упускаю что-то очевидное?

 -(void) viewWillAppear:(BOOL)animated {
 CLLocationCoordinate2D coord = {.latitude =  15.8700320, .longitude =  100.9925410};
 MKCoordinateSpan span = {.latitudeDelta =  3, .longitudeDelta =  3};
 MKCoordinateRegion region = {coord, span};
 [mapViewUI setRegion:region];
 PFQuery *query = [PFQuery queryWithClassName:@"Share"];
    [query setLimit:1000];
 [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
 if (!error) {
 self.mapViewData = objects;
     NSLog(@"HOW MANY ARE THERE %lu", (unsigned long)[objects count]);
 for (int i=0;i<[objects count];i  )
 {
 // Question * q = [[Question alloc]init];

 PFObject * obj = [self.mapViewData objectAtIndex:i];
 NSLog(@"%@", obj);
 self.theObject = obj;

 NSString *string = obj[@"WhereAt"];


 NSArray *stringArray = [string componentsSeparatedByString: @","];

 CLLocationDegrees myLatitude = [[stringArray objectAtIndex:0] doubleValue];
 CLLocationDegrees myLongitude = [[stringArray objectAtIndex:1] doubleValue];
 CLLocationCoordinate2D coord2 = {.latitude =  myLatitude, .longitude =  myLongitude};
     NSLog(@"LATITUDE %@", [stringArray objectAtIndex:0]);
 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 dateFormatter.dateFormat = @"MMM dd, yyyy";

 MKPointAnnotation *annotation2 = [[MKPointAnnotation alloc] init];
 [annotation2 setCoordinate:coord2];
 [annotation2 setTitle:obj[@"FamilyName"]];
 [annotation2 setSubtitle:obj[@"Result"]];

 [mapViewUI addAnnotation:annotation2];


 }


 } else {
 // Log details of the failure
 NSLog(@"Error: %@ %@", error, [error userInfo]);
 }


 }];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    if (annotation == mapViewUI.userLocation)
    {
        return nil;
    }
    else
    {

    MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] init];

    annotationView.enabled = YES;
    annotationView.canShowCallout = YES;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"MMM dd, yyyy";

    if ([annotation.subtitle isEqualToString:@"Accepted Bible"]) {
        NSLog(@"Accepted");
        annotationView.pinTintColor = [UIColor greenColor];

    }
   else if ([annotation.subtitle isEqualToString:@"Requested Different Material"]) {
       NSLog(@"Different");

        annotationView.pinTintColor = [UIColor blackColor];

    }
   else if ([annotation.subtitle isEqualToString:@"Not Home"]) {
      NSLog(@"Not Home");

        annotationView.pinTintColor = [UIColor yellowColor];

    }
   else if ([annotation.subtitle isEqualToString:@"Rejected Bible"]) {
       NSLog(@"Rejected");

        annotationView.pinTintColor = [UIColor redColor];

    }



    return annotationView;
    }

    return nil;
}
 

Ответ №1:

Я не знаю, является ли это причиной вашей проблемы, но вы должны «перерабатывать» представления аннотаций следующим образом:

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(ClubPinAnnotation *)annotation {

    MKAnnotationView *pinView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MyPinIdentifier"];

    if (!pinView) {
        pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyPinIdentifier"];
    } else {    
        pinView.annotation = annotation;
    }

    // Set up the pin view properties

    return pinView;
}
 

Кроме того, убедитесь, что ваши значения широты и длины указаны правильно. При просмотре карты будут запрашиваться только те пин-коды, которые действительно необходимы для текущего просмотра, поэтому, если у вас есть некоторые из них, например, с (0,0), они не будут показаны, пока вы не уменьшите масштаб, чтобы включить побережье Африки.

Комментарии:

1. Это на самом деле усугубило ситуацию … ни один из цветов не является правильным, и все еще есть много недостающих аннотаций.