MapKit / Τοποθεσία Διαχειριστής διακόπτεται η εφαρμογή κατά την εκφόρτωση άποψη

ψήφοι
7

Θα έχει ένα bug όπου η αίτησή μου συνετρίβη «EXC_BAD_ACCESS» όταν χτύπησε το πίσω κλειδί στη γραμμή πλοήγησης μου και την άποψη εκφόρτωση που είχε MapKit (MapView) και χρησιμοποίησε το Διευθυντή Τοποθεσία. Προσπάθησε για τις ημέρες να διορθωθεί το σφάλμα και τελικά κατέληξε σε μια λύση για κάποιον που έρχεται σε αυτό το πρόβλημα:

Προσθέστε αυτόν τον κώδικα για να dealloc σας

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}
Δημοσιεύθηκε 25/03/2010 στις 05:08
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Είχα αυτό το εργαλείο, :) Και, ναι, αυτή η λύση είναι στην πραγματικότητα μια σωστή λύση?

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

Τι συμβαίνει πίσω από τις σκηνές είναι το εξής:

  1. Θα χτυπήσει το backkey. Αυτό ξεφορτώνει και κατά συνέπεια απελευθερώνει τον ελεγκτή που κατέχει το MapView. Όπως έχει γίνει πολύ πιθανό μόνο μία αναφορά στον ελεγκτή θα dealloc'ed στη συνέχεια.

  2. Η locationManager, όμως, είναι πολύ πιθανό ακόμα αναφέρεται κάπου στα ενδότερα της geopositioning.

  3. Αν το locationManager ή / και MapView τώρα να στείλει μια ειδοποίηση στο αντίστοιχο αντιπρόσωπο τους, ακολουθούν μια μη έγκυρη δείκτη. Ποια θα οδηγήσει σε μια εξαίρεση EXC_BAD_ACCESS.

Ναι: nilling αντιπρόσωποι που οδηγούν σε αυτο είναι πάντα μια καλή ιδέα. Θα justed ήθελε η Apple θα προσθέσει κάποια automagic εκεί.

Απαντήθηκε 18/02/2012 στις 15:04
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more