Γιατί συντριβή μετά MKMapView ελευθερώνεται αν είμαι πλέον να χρησιμοποιείτε;

ψήφοι
23

Έχω ένα MKMapView. Μερικές φορές μετά από ελεγκτή άποψή μου απορριφθεί, θα πάρω ένα EXC_BAD_ACCESS.

Γύρισα σε NSSZombiesκαι μοιάζει με το MKMapView«s εκπρόσωπος - ελεγκτής άποψή μου! - καλείται, παρά την τόσο το MKMapViewκαι UIViewControllerυποκατηγορία που απελευθερώθηκαν. Έχω ελεγχθεί, και η διαχείριση της μνήμης μου είναι σωστή.

Τι συμβαίνει?

Δημοσιεύθηκε 02/02/2010 στις 23:10
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
43

Αυτό οφείλεται στο γεγονός ότι από τον τρόπο που MKMapViewλειτουργεί. Υπάρχει μια λειτουργία που εκκρεμούν, έτσι MapKit είναι διατηρώντας το MKMapViewκαι δεν έχει πράγματι deallocated ακόμα. Αυτό δεν είναι το ίδιο πρόβλημα. Το πρόβλημα είναι ότι ακόμα αποστολή μηνυμάτων σε αντιπρόσωπο σας.

Η λύση είναι απλή: Στο πλαίσιο της εκκαθάρισης ελεγκτή άποψή σας που εκπρόσωπο της προβολή χάρτη στην nilοποία θα αποτρέψει MKMapViewαπό το να στέλνουν μηνύματα σε αυτό.

Αυτό τεκμηριώνεται στο MKMapViewDelegate πρωτόκολλο αναφοράς :

Πριν από την απελευθέρωση ενός αντικειμένου MKMapView για την οποία έχετε ορίσει εκπρόσωπο, θυμηθείτε να ρυθμίσετε το ακίνητο εκπρόσωπος αυτού του αντικειμένου χωρίς να δεχτεί γκολ. Ένα μέρος που μπορείτε να το κάνετε αυτό είναι με τη μέθοδο dealloc όπου θα διαθέσει στην προβολή χάρτη.

Επεξεργασία: Δώστε Oscar ένα Ψήφος καθώς, ακριβώς κάτω, ο οποίος παρείχε την προσφορά τεκμηρίωση εδώ.

Δεδομένου ARC, προτείνω αυτό σημαίνει ότι θα πρέπει να οριστεί εκπρόσωπος του χάρτη σας με nilτο χειριστήριο άποψή σας dealloc.

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

ψήφοι
18

Εντάξει, αυτή είναι η επιβεβαίωση της απάντησης. Είναι από το έγγραφο της Apple, αλλά λείπει από MKMapView. Είναι βρεθεί μόνο υπό την τεκμηρίωση για το πρωτόκολλο εκπροσώπου του:

Πριν από την απελευθέρωση ενός αντικειμένου MKMapView για την οποία έχετε ορίσει εκπρόσωπο, θυμηθείτε να ρυθμίσετε το ακίνητο εκπρόσωπος αυτού του αντικειμένου χωρίς να δεχτεί γκολ. Ένα μέρος που μπορείτε να το κάνετε αυτό είναι με τη μέθοδο dealloc όπου θα διαθέσει στην προβολή χάρτη.

ΣΗΜΕΙΩΣΗ: Αυτό ισχύει και για UIWebView.

Έθεσα το δείκτη του εκπροσώπου του MapView να μη δεχτεί γκολ σε μέθοδο dealloc του πληρεξουσίου, και συντριβές μας φαίνεται να έχουν εξαλειφθεί.

Απαντήθηκε 20/11/2011 στις 22:20
πηγή χρήστη

ψήφοι
2

Ρύθμιση εκπρόσωπος της προβολή χάρτη να nilμην λειτούργησε για μένα. Ωστόσο, η ρύθμιση showsUserLocation=NOσχετικά με τον εκπρόσωπο της εργασίας, κάνοντας ότι δεν υπάρχουν ενημερώσεις τοποθεσίας λάβει.

Απαντήθηκε 02/09/2011 στις 17:57
πηγή χρήστη

ψήφοι
0

Το πρόβλημα, στην περίπτωσή μου, ήταν η πρώτη φορά που ξεκίνησε η εφαρμογή δεν πατήσετε «επιτρέπουν» όταν ζητείται άδεια θέση (κατά λάθος !!).

Κατάργηση εγκατάστασης εφαρμογών και την εκ νέου εγκατάστασή του, όταν ταχεία εμφανίζονται επιτρέπω τις άδειες και όχι περισσότερο συντριβή!

Απαντήθηκε 21/05/2015 στις 15:11
πηγή χρήστη

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