Αντιμετωπίζω κάποιο πρόβλημα με MKMapView / σχόλια / UINavigationController. Βασικά, εγώ διαχειρίζονται τις απόψεις μου χρησιμοποιώντας ένα UINavigationController? μία άποψη μου περιέχει MKMapView και μπορώ να προσθέσω σχόλια σε αυτό (10 έως 200), χρησιμοποιώντας τη μέθοδο addAnnotations.
Τα πάντα λειτουργούν καλά εκτός από ένα πράγμα: αν μπορώ να περιηγηθείτε «πολύ γρήγορα» για UINavigationController μου, τις συντριβές προσομοιωτή iphone, λαμβάνει ένα σήμα «EXC BAD ΠΡΟΣΒΑΣΗ». Για παράδειγμα, αν μπορώ να φορτώσει την άποψή μου, που περιέχει το MKMapView και χωρίς καθυστέρηση, πατήστε το κουμπί «Πίσω» από τη γραμμή πλοήγησης UINavigationController, να πάρω το σήμα. Σκέφτηκα ότι το πρόβλημα ήταν με τη μέθοδο addAnnotations: όταν είναι φορτωμένο MKMapView μου, μπορώ να προσθέσω σχόλια σε αυτό, αλλά μοιάζει με όλα γίνονται ασύγχρονα. Αν περιμένω σαν ένα δευτερόλεπτο πριν το πάτημα του κουμπιού «Πίσω», να πάρω κανένα λάθος, αλλά αν είμαι πάρα πολύ γρήγορα, συντρίβει. Έχω κανένα λάθος σε όλα, αν μπορώ να αφαιρέσετε τη γραμμή addAnnotations. Υποθέτω ότι είναι επειδή την άποψή μου, απελευθερώνεται από την UINavigationController πριν η μέθοδος addAnnotations πήρε το έργο μου.
Κάθε καλή λύση σε αυτό; Δεν θέλω ο χρήστης να περιμένει (εμφανίζοντας μια άποψη φόρτωσης για παράδειγμα)? Υποθέτω ότι η λύση θα μπορούσε να είναι μια καλύτερη διαχείριση μνήμης, αλλά δεν βλέπω πώς θα μπορούσα να το κάνουμε αυτό.
if(DEBUG_MODE) { NSLog(@Creating array of placemarks : begin); }
self.placemarkCache = [[NSMutableArray alloc] init];
// Loading placemarks for a placemark dictionary
NSArray *sortedKeys = [[self.placemarkDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (id key in sortedKeys) {
MyPlacemark *currentPlacemark = [self.placemarkDictionary objectForKey:key];
[self.placemarkCache addObject:currentPlacemark];
[currentPlacemark release];
}
if(DEBUG_MODE) { NSLog(@Creating array of placemarks : done); }
if(DEBUG_MODE) { NSLog(@Adding placemarks : begin); }
[self.mapView addAnnotations:self.placemarkCache];
if(DEBUG_MODE) { NSLog(@Adding placemarks : done); }
Σε αυτό το παράδειγμα, παίρνω τα «Προσθήκη σημάνσεις: γίνεται» μήνυμα πριν από οτιδήποτε να εμφανίζονται στο χάρτη.













