0

在我的应用程序中,我从 Parse 查询中获取纬度和经度以及其他一些数据。但是,只添加了大约 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;
}
4

1 回答 1

0

我不知道这是否是您的问题的原因,但您应该像这样“回收”注释视图:

- (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) 处的图钉视图,它们将不会显示,直到您缩小以包括非洲海岸。

于 2016-10-17T07:04:27.380 回答