De la documentation, la propriété MKMapView, Annotations, est un NSArray et non un NSMutableArray. Donc Annotations est censé être "immuable". Mais les méthodes instantanées de MKMapView: addAnnotation et removeAnnotation sont capables de changer le tableau Annotations. Donc, à première vue, il semble y avoir des incohérences. Il doit y avoir quelque chose que j'ai manqué. J'espère que quelqu'un de compétent pourrait éclairer cela.Une question à propos des annotations MKMapView
Répondre
Vous devez utiliser addAnnotation
et removeAnnotation
pour ajouter/supprimer des annotations au lieu de manipuler le tableau d'annotations directement.
Je suppose que ces deux fonctions effectuent un traitement ainsi que l'ajout/la suppression d'annotations du tableau.
Merci pour la réponse, je me demandais si les appels d'ajout et de suppression remplaceraient en quelque sorte l'ancien tableau avec un nouveau. Comme vous le dites, nous sommes censés utiliser les méthodes données, le type assigné est de nous empêcher de faire quoi que ce soit directement. – Stanley
En déclarant la propriété annotations
un NSArray
, le code qui accède au tableau par cette propriété ne peut modifier en toute sécurité et doit le traiter comme un NSArray
immuable. Cependant, cela ne signifie pas que le tableau lui-même est immuable.
Voici un exemple de la façon dont quelque chose comme cela pourrait fonctionner:
@interface MyObject
{
// instance variables
NSMutableArray* internalArrayRepresentation;
}
// properties
@property (nonatomic, readonly) NSArray* immutableAccessor;
// methods
-(void)addItem:(NSObject*)object;
@end
@implementation MyObject
@synthesize immutableAccessor=internalArrayRepresentation;
-(id)init
{
if ((self = [super init]))
{
// create the mutable array
internalArrayRepresentation = [[NSMutableArray alloc] init]
}
}
-(void)addItem:(NSObject*)object
{
[internalArrayRepresentation addObject:object];
}
...
@end
Dans cet exemple, vous pouvez voir que internalArrayRepresentation
est un tableau mutable, et que son extérieur accessible MyObject comme immutableAccessor
. Mais parce que la définition de la propriété indique que immutableAccessor
est un NSArray
, les appelants doivent le traiter de cette façon et ne peuvent pas le manipuler.
D'autres implémentations peuvent également y parvenir. La raison typique pour utiliser un pattern comme celui-ci est que vous voulez que MyObject
maintienne le contrôle sur le contenu du tableau: peut-être que seulement certains objets peuvent être ajoutés, peut-être que les objets doivent être modifiés ou clonés, peut-être tout peut être ajouté mais rien ne peut être supprimé, etc.
Merci pour votre réponse très détaillée. Il y a des modèles de code (tels que l'assignation dans la ligne "@sysnthesize") que je n'ai jamais vu auparavant. Mais ils doivent être des codes plus avancés que tout ce que j'ai pu rencontrer. Merci ... – Stanley
- 1. Ajouter des annotations aléatoires à MKMapView
- 2. MKMapView annotations pas rafraîchissantes
- 3. MKMapView showsUserLocation et charger des annotations personnalisées
- 4. A propos MKMapView
- 5. Problèmes de suppression des annotations d'un MKMapView
- 6. Une question à propos honeybots
- 7. Question à propos des Masterpages
- 8. question à propos de viewController et navigationController
- 9. Une question à propos des valeurs alpha des images
- 10. question à propos pimpant
- 11. Une question à propos de UISegmentedControl
- 12. une question à propos de multitouch
- 13. Une question à propos de UIEvent
- 14. Question à propos des boucles et continuez
- 15. question rapide à propos des pointeurs
- 16. mkpinannotation question sur mkmapview
- 17. Une question à propos de UITabelViewCell
- 18. Une question à propos de l'instruction MIPS
- 19. Une question intéressante à propos mysql_real_escpae_string
- 20. Une question à propos de Linked List
- 21. MKMapView (annotations et emplacements) - Développement de l'iPhone
- 22. Une question à propos des listes en Python
- 23. Une simple question à propos de Spring IoC
- 24. Mise à jour des annotations MKMapView à partir d'un tableau mis à jour?
- 25. Question à propos de loadNibNamed:
- 26. Question À propos de move_uploaded_file()
- 27. Question à propos de mysql_fetch_array?
- 28. Question à propos de Cyclone
- 29. Question à propos de runOnUiThread
- 30. question Débutant à propos e.Item.ItemIndex
Je ne pouvais pas voir des incohérences ou des contradictions. –