Problem mit Map-Annotation und MKMapView in iOS 4.2?

Habe ich eine Ansicht der Karte mit pins, wenn der Benutzer einen pin geht es um einen detail-Bildschirm für die pin. Ich habe auch eine Tabelle anzeigen, wenn der Benutzer ein Element auswählt geht es um die selbe Art-detail-Ansicht.

Hier ist das problem ...

Es scheint gut zu funktionieren, in der alles von 3.1.3 auf 4.1. Das ist die detail-Ansicht entspricht, mit der pin. Aber ich habe einen Benutzer, der nur ein Upgrade auf iOS 4.2 und sagt, dass unter 4.1 funktionierte es gut, aber in 4.2 die pin-Auswahl nimmt ihn, um die Details für einen anderen pin. Aber in der Tabelle anzeigen, es funktioniert immer noch gut.

Ist es möglich, dass es eine änderung in MKMapView in iOS 4.2, dass Veränderungen, wie die pinID ausgewählt ist?

Ergänzung - ich habe die relevanten Teile der viewForAnnotation und checkButtonTapped

- (MKPinAnnotationView *)mapView:(MKMapView *)eMapView viewForAnnotation:(id <MKAnnotation>)annotation {

int postTag = 0;

MKPinAnnotationView *pinView = (MKPinAnnotationView *)[eMapView dequeueReusableAnnotationViewWithIdentifier:@"Pin"];

if(pinView == nil) {

    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
    pinView.frame = CGRectMake(0, 0, 25, 25);

} else {

    pinView.annotation = annotation;

}   

//Set up the Right callout
UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
myDetailButton.frame = CGRectMake(0, 0, 23, 23);
myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

[myDetailButton addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

//Identify which pin is being selected
if ([[annotation title] isEqualToString:@"Current Location"]) {
    postTag = 99999;
} else {
    postTag = [annotation getPinID];

} 

myDetailButton.tag  = postTag;

pinView.rightCalloutAccessoryView = myDetailButton;

pinView.animatesDrop = YES;

//Set to show a callout on the pin
pinView.canShowCallout = YES;

return pinView;
}

//Method to show detail view when the callOut button is selected
- (IBAction) checkButtonTapped: (id) sender {

int nrButtonPressed = ((UIButton *)sender).tag;

if (nrButtonPressed < 99999) {
    if (self.showDetailView == nil) {

        DetailData *tmpViewController = [[DetailData alloc] initWithNibName:@"Detail" bundle:nil];
        self.showDetailView = tmpViewController;
        [tmpViewController release];

    }

    buttonDetail = [[mapView annotations] objectAtIndex:(nrButtonPressed-1)];

    NSMutableArray *tmpArray = [NSMutableArray arrayWithObjects: [buttonDetail getDataI], [buttonDetail getDataII], [buttonDetail getDataIII], [buttonDetail getDataIV], [buttonDetail getDataV], nil];

    self.showDetailView.eventData = [[NSMutableArray alloc] initWithArray:tmpArray copyItems:YES];

    [self.navigationController pushViewController:self.showDetailView animated:YES];

    [self.showDetailView.eventData release];

}

}

Wie Sie sehen können, in checkButtonTapped ich notieren Sie die pin aktiviert, dann sammeln die Daten von der annotation für die pin. Das problem scheint zu sein, dass nrButtonPressed ist jetzt falsch. Aber es ist schön, wenn kompiliert 4.1

  • Zeigen Sie das viewForAnnotation Methode und den code für die Verarbeitung des pin-Auswahl.
  • Ich werde froh sein, um nach dem code (its nur ziemlich lang), aber ich glaube nicht, dass ist das Problem. Der Grund dafür ist, dass ich eine version erstellt, in 4.1 auf einem iPod Touch und alles in Ordnung ist. Ich habe keine änderungen an viewForAnnotation und wenn ich kompiliert habe, in der 4.2 er hat den Fehler im simulator (emuliert iPhone 4.2) Der Nutzer sagte, dass Sie eine alte version der app funktionierte gut in 4.1, aber wenn er Upgrade auf 4.2 wird die gleiche version der app gestartet zeigt Sie den Fehler. Wollen Sie immer noch der code denn ich werde es posten, wenn Sie tun?
  • Wenn der code sehr lang und Komplex, Sie haben zu tun, einige Debuggen und isolieren möglich, Probleme Bereich. Versuchen Sie es zum reproduzieren des Problems in einem separaten, kleinen Projekt. Der einzige Unterschied in 4.2 MapKit darauf hingewiesen, in Apple ' s Release Notes ist in Bezug auf Handhabung Beschriftungsansicht wieder zu verwenden (Siehe die MapKit-Eintrag unter Anmerkungen Und Bekannte Probleme). Dies kann für Sie relevant sein.
InformationsquelleAutor LancDec | 2010-12-08
Schreibe einen Kommentar