Как я могу выполнить переход, основанный на выводе MKAnnotation? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть Карта с 2 событиями, у которых у обоих из них есть булавки довольно близко друг к другу.

Этот код будет извлекать расположение обоих выводов:

// This query is used to get the location of all events in the parse cloud database
PFQuery *locationQuery = [PFQuery queryWithClassName:@"Event"];
[locationQuery whereKeyExists:@"EventLocation"];
[locationQuery whereKey:@"Organizator" notEqualTo:PFUser.currentUser.username];
[locationQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        // All the locations are stored in the objects NSArray

        for (PFObject *gp in objects) {

            // We store all the found locations in a PFGeoPoint object and then we have to transform this PFGeoPoints in real latitude/longitude coordinates via the CLLocationCoordinate2DMake method
            self.location = [gp objectForKey:@"EventLocation"];
            CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(self.location.latitude, self.location.longitude);

            // Subclass of MKAnnotation
            AnnotationMap *AllEventsAround = [[AnnotationMap alloc]init];

            AllEventsAround.coordinate = coordinate; // We assign the coordinates got in CLLocationCoordinate2DMake to the coordinates of the AnnotationMap class
            AllEventsAround.title = [gp valueForKey:@"SportName"];
            AllEventsAround.subtitle = [NSString stringWithFormat:@"%@",[gp valueForKey:@"DateAndTime"]];

            // method call to point the annotations on the map
            [self.EventsmapMapView addAnnotation:AllEventsAround];
        }
    } else {
        // Log details of the failure
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

Поиск работает нормально. Примером может быть:

=> PFGeoPoint: 0x2805XXXX, широта: 50.XXXXX, долгота: 19.XXXXX

=> PFGeoPoint: 0x280XXXXX, широта: 50.061XXXX, долгота: 19.93XXXX

Когда я нажимаю на булавку, она выполняет переход в соответствии с этим кодом:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"toEventDetails"]){

    EventDetailsTableViewController *controller = (EventDetailsTableViewController *)segue.destinationViewController;
    controller.Pointfrommap = self.location;
  }
} 

Моя проблема:

self.location прибывает из результата вышеупомянутого запроса (PFQuery), поэтому он сохранит последнее значение, полученное из запроса, но не значение, полученное от прикосновения к пину

Мое предположение:

Я знаю, что могу использовать этот метод делегата:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{

    //In case a pin is selected, we perform a segue to the event's detail view. On the segue, the actual event coordinates are stored in tappedCoord and send to the details view controller

    [self performSegueWithIdentifier:@"toEventDetails" sender:self];   // Use your appropriate segue identifier
}

Может быть, я могу кое-что добавить сюда, чтобы передать правильное местоположение.

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете попробовать

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{

     AnnotationMap *allEventsAround = (AnnotationMap*)view.annotation;
     PFGeoPoint *loc  = [PFGeoPoint geoPointWithLatitude:allEventsAround.coordinate.latitude longitude:allEventsAround.coordinate.longitude];
    [self performSegueWithIdentifier:@"toEventDetails" sender:loc];   // Use your appropriate segue identifier
}

Тогда внутри prepareForSegue

controller.Pointfrommap =  (PFGeoPoint*) sender;
...