Πρόβλημα προσθήκη πολλαπλών σχολιασμούς στο χάρτη

ψήφοι
1

Εντάξει, έτσι είμαι έχοντας αυτό το πρόβλημα. Αυτό που θέλω να κάνω είναι το χέρι προσθέσετε πολλά σχόλια σε ένα χάρτη. Όταν προσθέτω ένα μόνο σχόλιο, λειτουργεί άψογα. Οι σταγόνες καρφίτσα, μπορείτε να κάνετε κλικ σε αυτό για να δείτε επεξήγηση του, η ζωή είναι καλή.

Το πρόβλημα έρχεται όταν θέλω να προσθέσω περισσότερες από μία. Όταν προσθέσετε το δεύτερο, ξαφνικά ο πείρος δεν είναι χρωματισμένα σωστά (δηλαδή, ανάλογα με το μέγεθός τους θα πρέπει να είναι ένα συγκεκριμένο χρώμα, αλλά είναι τώρα τόσο η ίδια ...), και το πιο σημαντικό όταν κάνετε κλικ πάνω τους, για να δουν τους επεξήγηση, η εφαρμογή κολλάει με exex_bad_access. Πραγματικά δεν έχουν ιδέα τι είναι λάθος, ίσως είμαι προσθέτοντας πάρα πολλές απόψεις στο χάρτη; Αλλά αυτό είναι μόνο 9 καρφίτσες και οι ακίδες ίδιοι προσθέτουν μια χαρά. Εδώ είναι κωδικό μου ...

    - (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *stops = [[NSMutableArray alloc] init];  //Get list of all the stops available
    Bus *bus1 = [[Bus alloc] init];                         // Bus 1 holds the stops
    stops = [bus1 returnStops];
    for (NSString *stop in stops)                           //Go through each stop to add annotation to map
    {
        Bus *bus2 = [bus1 initWithStop:stop];                //Create an instance of bus with a given stop
        MapAnnotation *eqAnn = [MapAnnotation annotationWithBus:bus2]; 
        [self.mapView addAnnotation:eqAnn];                    //Add the annotation to the map
        //[eqAnn release];
        //[bus2 release];
    }
    [self recenterMap];
    [stops release];

}
- (MKAnnotationView *)mapView:(MKMapView *)mapView 
            viewForAnnotation:(id <MKAnnotation>)annotation {
    MKAnnotationView *view = nil;
    if(annotation != mapView.userLocation) {
        MapAnnotation *eqAnn = (MapAnnotation*)annotation;
        view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@busLoc];
        if(nil == view) {
            view = [[[MKPinAnnotationView alloc] initWithAnnotation:eqAnn
                                                    reuseIdentifier:@busLoc] autorelease];
        }
        CGFloat magnituide = [eqAnn.bus.magnitude floatValue];

        if(magnituide >= .80f) {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorRed];
        } else if(magnituide >= .60f) {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorPurple];
        } else 
        {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorGreen];
        }
        [(MKPinAnnotationView *)view setAnimatesDrop:YES];
        [view setCanShowCallout:YES];
    } 

    return view;
}

ακόμη δοκιμάσει την αφαίρεση του δεύτερου λειτουργία, αλλά δεν έκανε τίποτα.

Ευχαριστώ για τη βοήθεια! PS Θα ήθελα επίσης να προσθέσω, υπάρχει συνήθως ένα ή δύο ακίδες έξω από το 9, το οποίο λειτουργεί όταν κάνετε κλικ στο σχολιασμό ...

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

Δημοσιεύθηκε 17/08/2009 στις 18:49
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
1

Φαίνεται ότι η διαχείριση μνήμης της stopsμεταβλητής είναι εσφαλμένη. Θα διαθέσει ένα μεταβλητό σειρά, στη συνέχεια αντικαταστήστε ότι η σειρά με την τιμή επιστροφής του -[Bus returnStops], στη συνέχεια, αφήστε αυτό. Επίσης, δεν είναι σαφές τι συμβαίνει με bus2- δεν -[Bus initWithStop:]επιστρέψει μια διαφορετική περίπτωση Bus; Δεν είναι συνηθισμένο να στείλετε οποιοδήποτε τρόπο -init*σε ένα ήδη αρχικοποιηθεί αντικείμενο. Νομίζω ότι είναι πιθανόν να συγχέεται με τις συμβάσεις διαχείρισης μνήμης σε Cocoa Touch. Εδώ είναι μια συλλογή από άρθρα και άλλες αναφορές σχετικά με τη διαχείριση της μνήμης κακάο (το οποίο είναι το ίδιο θηρίο).

Απαντήθηκε 17/08/2009 στις 18:55
πηγή χρήστη

ψήφοι
0

Έτσι, η απάντηση ήταν ότι κράτησε την αποστολή λεωφορεία1 το αντικείμενο init, έτσι ώστε να έχεις μπερδευτεί.

«Γεια σου David,

μοντέλο δεδομένων σας φαίνεται hosed για μένα. Έχετε μόνο ένα αντικείμενο λεωφορείο που επανειλημμένα την αποστολή initWithStop: να.

Η ελπίδα αυτό βοηθά.

Καλή τύχη! "

Σας ευχαριστώ παιδιά για τη βοήθειά σας! Μπορείτε όλοι με βοήθησαν αρκετά!

Απαντήθηκε 17/08/2009 στις 20:02
πηγή χρήστη

ψήφοι
0

Δεν θα το ονομάσουμε ένα πρόβλημα διαχείρισης μνήμης - θα ήθελα απλώς να πω ότι χρησιμοποιείτε σωστά τις αναφορές πίνακα.

Μετά την κατασκευή του πίνακα με NSMutableArray * σταματά = [[NSMutableArray αΐΐοο] init], το επόμενο βήμα είναι να χρησιμοποιηθούν [σταματά addObject:] για να προσθέσετε κάθε στάση που θέλετε να αποθηκεύσετε.

Μετά από αυτό? Δεν είναι σαφές τι είστε πραγματικά προσπαθούμε να κάνουμε.

Απαντήθηκε 17/08/2009 στις 19:34
πηγή χρήστη

ψήφοι
0

Έχετε δοκιμάσει τη χρήση AddAnnotations αντί να προσθέσετε σχόλιο; - (κενό) addAnnotations: (NSArray *) σχολιασμούς. Αυτό θα μπορούσε να λειτουργήσει για σας ... αλλά κοιτάζοντας την απάντηση παραπάνω και περαιτέρω επιθεώρηση αντιμετωπίζετε κάποια προβλήματα μνήμης διαχείριση σε viewDidLoad σας (αν thi s δεν μπορεί να είναι η αιτία του προβλήματός σας, αλλά θα μπορούσε να είναι). Πρώτα από εσάς κατανομή του πίνακα (στάσεις) και, στη συνέχεια, ovveriding με κάποια ποικιλία στο αντικείμενο του λεωφορείου, αυτό θα προκαλέσει διαρροή. Επίσης μπορείτε στη συνέχεια απελευθερώνοντας ότι η σειρά που θα μπορούσε να προκαλέσει τη συντριβή από τη στιγμή που την απελευθέρωση του πίνακα που είναι στην πραγματικότητα στο αντικείμενο των λεωφορείων ν ωρίς να έχει αυξημένη περιεκτικότητα σε αναφορά σε αυτό. Δεν είμαι σίγουρος τι κάνει initWithStop, αλλά ίσως να πάρει μια διαρροή εδώ αν initWithStop διατηρεί το αντικείμενο.

Απαντήθηκε 17/08/2009 στις 18:56
πηγή χρήστη

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