Je suis un grand fan de la génération de code (à partir d'UML) et venant du monde Java, je me demande comment j'implémenterais la gestion d'association bidirectionnelle automatisée dans Objective-C.Étendre NSMutableArray pour la gestion d'association bidirectionnelle
Image d'une association Partenaire < -> Adresse, un-à-plusieurs et navigable à partir des deux extrémités. Ce que je voudrais réaliser, c'est que si j'ajoute une Adresse à un Partenaire, cet objet Adresse devrait automatiquement connaître son Partenaire. Par conséquent, le modèle d'implémentation doit comporter un NSMutableArray * du côté du partenaire et un partenaire * du côté de l'adresse. La propriété du côté Adresse est facile à implémenter car setPartner: (Partner *) aPartner peut automatiquement insérer l'adresse (self) dans le NSMutableArray du partenaire gérant les adresses. L'autre côté, cependant, n'est pas si facile à mettre en œuvre. Le modèle d'implémentation standard pour les références trop nombreuses dans Objective-C semble être NSMutableArray, obtenu via la méthode get de @property. L'objet en possession de ce NSMutableArray pourrait alors insérer un objet Address dans le tableau, ce qui ne serait bien sûr pas mettre à jour l'autre côté.
Je sais qu'il existe d'autres modèles pour ce type de gestion d'association, par exemple, via les méthodes addTo ...() et removeFrom ...(). Mais je ne sais pas encore si cela correspondrait à d'autres principes de la programmation Cocoa ou même m'empêcherait d'utiliser Cocoa efficacement. Je pense à Interface Builder ici. Pas beaucoup d'expérience, mais j'ai vu quelque chose appelé un ArrayController qui semble être très pratique mais qui semble aussi s'attendre à une propriété de type NSMutableArray avec laquelle travailler. Et si ce type insère des objets dans le tableau, j'ai besoin d'intercepter cela et de faire l'ajustement de l'autre côté.
En tant que programmeur Java, j'aurais tendance à sous-classer NSMutableArray maintenant et remplacer certaines de ses méthodes qui pourraient alors manipuler l'autre extrémité. Serait-ce possible? J'ai lu sur les catégories, mais jusqu'à présent, j'ai compris que je pouvais seulement ajouter des méthodes à une classe de cette façon et ne pas les ignorer ni ajouter à la structure de celui-ci. Ou devrait-il être le transfert de méthode? Je suis confus en ce moment. Si vous pouviez me diriger dans la bonne direction en pensant que ce serait génial. Merci beaucoup!
Dave, je vous remercie de m'avoir sauvé de l'apprentissage à la dure - je jure que je ne penserai jamais à prolonger les classes de collection à nouveau;) Je vais regarder de plus près sur CoreData maintenant. Cela ne semble pas prendre en charge l'héritage, mais pour la plupart des parties de mes modèles de données, tout ira bien.J'espère qu'il peut gérer de plus grandes quantités de données (sous forme binaire). Merci encore! –
déjà découvert qu'il peut faire de l'héritage. parfait!!! –
Pourquoi l'existence de nombreuses sous-classes privées de NSArray présente-t-elle un défi lors du sous-classement? Vous n'utiliserez votre propre sous-classe que lorsque vous en créerez explicitement des instances - ce n'est pas comme si vous modifiez l'un des types que les méthodes Cocoa existantes renvoient - donc je ne vois pas comment la prévalence des autres sous-classes est pertinente de quelque manière que ce soit. Qu'est-ce que je rate? –