Προσαρμοσμένη σχολιασμό, «Πρόσβαση άγνωστη μέθοδος συλλέκτη»

ψήφοι
0

Έχω κάνει μια τάξη έθιμο MKAnnotation, MapLocation. Είμαι έχοντας κανένα πρόβλημα ρύθμισης ή να πάρει ακίνητα, εκτός από αυτή τη μέθοδο για να δημιουργήσετε ένα MKAnnotationView. Θα πρέπει να το κάνουμε εδώ, αφού υποτίθεται για να αναζητήσετε έναν τύπο τοποθεσίας από το δείκτη του σχολιασμού και επιλέξτε ένα από μια οικογένεια των εικόνων συνήθειας σχολιασμό για την annotationView.

Μετά από πολλές προσπάθειες για τη δημιουργία προσαρμοσμένων getters και setters στην MapLocation.h και .m, εγώ το βρασμένο κάτω στο σημείο όπου δεν μπορώ ακόμη να αντιγράψετε το (υποχρεωτικό) κτήτορας, τον τίτλο, το μετονομάσετε σε title2, και να προσπαθήσει να πάρει τιμή επιστροφής της . Αυτός είναι ο κωδικός μου:

-(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *placemarkIdentifier=@Map Location Identifier;
NSString *str1=annotation.title;
NSString *str2=annotation.title2;
if([annotation isKindOfClass:[MapLocation class]]) {
    MKAnnotationView *annotationView=(MKAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
    if (annotationView==nil) {
        annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
    }
    else
        annotationView.annotation=annotation;


    return annotationView;
}
return nil;

}

Από την 4η γραμμή, τίτλος επέστρεψε σωστά, αλλά το αίτημα της 5ης γραμμής στο αντιγραφεί μέθοδος αποδίδει το μήνυμα λάθους στο θέμα.

Έκανα δούμε στα έγγραφα XCode, αλλά είμαι κατά πάσα πιθανότητα απλά δεν πάρει πώς να την κηρύξει έτσι αυτή η μέθοδος βλέπει. Περίεργα ότι βλέπει τον συλλέκτη τίτλο, αλλά όχι το αντίγραφο title2.

Δημοσιεύθηκε 18/05/2010 στις 15:42
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
3

Δοκιμάστε να αλλάξετε τη γραμμή από την dot συμβολισμός σε αυτό:

NSString *str2=[annotation title2];

και το σφάλμα θα πρέπει να πάει μακριά.

Αυτό που συμβαίνει είναι ότι ο μεταφραστής έχει πει ότι σχολιασμός είναι MKAnnotation. Το γεγονός ότι ξέρετε τι άλλες μεθόδους που έχεις είναι χωρίς σημασία? ο compiler δεν είναι μέντιουμ - το μόνο που ξέρει είναι ότι σχολιασμό ακολουθεί το πρωτόκολλο MKAnnotation, τίποτα περισσότερο. Ο λόγος που το βλέπει ο κτήτορας τίτλος είναι beacuse ο τίτλος ορίζεται σε MKAnnotation.

Μπορείτε επίσης να διορθώσετε αυτό, χρησιμοποιώντας ένα καστ:

MapLocation *mapLocation = (MapLocation *)annotation;

Τώρα, μπορείτε να πείτε

NSString *str2=mapLocation.title2;

γιατί έχετε πει ο compiler που mapLocation είναι MapLocation διάκειται εχθρικά.

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

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