#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. Это на самом деле усугубило ситуацию … ни один из цветов не является правильным, и все еще есть много недостающих аннотаций.