Sentinelle manquante dans la méthode d'expédition
Je veux créer une sous-classe de NSMutableArray
et le besoin de remplacer la -initWithObjects:
méthode.
Mais Comment appeler [super xxx];?
- (id) initWithObjects:(id)firstObj, ... {
[super initWithObjects:firstObj]; //Error: Missing sentinel in method dispatch
//Error: The result of a delegate init call must be immediately returned or assigned to "self"
}
Grâce.
source d'informationauteur Ben Lu
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. Comme discuté dans la documentation de
NSArray
:De sorte que vous pouvez affecter
self = [super init];
et ajouter les objets de votre initialiser l'objet. En effet, en raison de la façon dontNSArray
est mis en œuvre, l'appel à la-initWith…
méthode est susceptible de renvoyer une instance d'un différentsNSArray
sous-classe.Avis que la documentation traite également des alternatives de sous-classement
NSArray
qui peut être plus facile, plus fiable, ou mieux d'une autre façon.Puis manquantes "sentinel" le message se réfère à l'manquant néant de la résiliation. En fait, selon la police-de-tout-savoir-Wikipédia:
Le nom du néant qui met fin à une longueur variable de la liste des paramètres de l'Objective-C
aussi: ganglion Sentinelle, un objet pour représenter la fin d'une structure de données
aussi: Sentinelles de la valeur, une valeur utilisée pour mettre fin à une boucle
aussi: Dans les protocoles réseau tels que Bisync, la sentinelle des valeurs indiquent où les images de début et de fin
Sous-classement
NSArray
/NSMutableArray
ne fonctionne pas comme sous-classement, la plupart des classes.NSArray
est une classe de cluster, consultez notes de sous-classement de laNSArray
de la documentation.Maintenant, pour votre question précise, sous-classement
va_list
méthodes est un peu difficile, il y a un certain nombre de façons de gérer cette situation. Le "plus sûr", serait pour le traitement de votreva_list
dans unNSArray
et le passer dans une autre méthode, qui traitait de ce que vous vouliez. L'autre, un peu moins portable, légèrement hackier est de créer un nouveauva_list
liste sur la pile de passer à travers.Sous-classement Pommes classes de Collection n'est pas difficile si vous utilisez une petite astuce (voir aussi: cocoawithlove).
Une sous-classe est un "est-un" de la relation à l'objet-orienté la Conception. Mais il y a aussi "a-un" relations", c'est à dire des wrappers.
Si vous essayez de créer une sous-classe NSArray en utilisant une pure relation " est-un, je pense qu'il serait un peu dur, que vous avez à faire C au niveau de la gestion de la mémoire.
Mais si vous ajoutez un a-une relation — ou: créer un wrapper — dans le même temps, vous pouvez le subcalssing assez facilement: il suffit de faire votre tableau personnalisé de classe ont un membre régulier du NSArray. Maintenant redéfinir sa méthode de transmettre les appels à l'objet membre. J'ai montré cette dans ce post, où je viens d'ajouter des objets, qui passent un certain test.
Mais vous verrez, que je n'avais pas de mettre en œuvre la méthode que vous avez parlé correctement, mais je pose une erreur. La raison en est que la méthode est un variadic méthodes, qui comporte un nombre variable d'objets que vous pouvez passer et de gérer cela, vous avez un peu de travail. cocoawithlove a un excellent article à ce sujet.
Pour vous — si l'aide de qui a-trick — il pourrait ressembler à
Essayer