J'ai une méthode d'initialisation qui prend un (id) Argument:Pourquoi ai-je besoin de me transformer en ID?
-(id) initWithObject:(id) obj;
Je suis en train de l'appeler comme ceci:
[[MyClass alloc] initWithObject:self];
Mais XCode se plaint de l'argument étant une « distincte Objective-C type "(qui indique généralement une incompatibilité de type ou un niveau d'erreur d'indirection).
Si je mets explicitement le moi à (id) l'avertissement disparaît. Dans les deux cas, le code s'exécute comme prévu. Il est intéressant de noter que sur la ligne suivante, je suis en train de passer à une autre méthode qui prend aussi un identifiant, et cela fonctionne bien.
Je me demande s'il me manque quelque chose de subtil - ou est-ce une particularité du compilateur?
Je ne suis pas entièrement à l'aise de le lancer jusqu'à ce que je sois sûr des raisons pour lesquelles c'est nécessaire.
[Modifier]
On me demande de fournir plus de code. Je ne suis pas sûr qu'il y ait beaucoup d'autres choses pertinentes. Voici mon code réel qui fait l'appel. Notez qu'il est lui-même dans une méthode init. Il est l'appel à initWithSource
qui est de donner l'avertissement:
-(id) initWithFrame:(CGRect) frame
{
self = [super initWithFrame: frame];
if(self)
{
delegate = nil;
touchDelegate = [[TBCTouchDelegate alloc] initWithSource:self];
[touchDelegate.viewWasTappedEvent addTarget: self action:@selector(viewWasTapped:)];
}
return self;
}
Et voici la méthode d'initialisation appelé:
-(id) initWithSource:(id) sourceObject
{
self = [super init];
if (self != nil)
{
// Uninteresting initialisation snipped
}
return self;
}
Vous voudrez peut-être afficher plus de code ici; rien ne saute, mais avec seulement deux lignes de travail, c'est difficile à dire. –
D'accord avec Ben, mais une chose à considérer, est la méthode initWithObject déclaré? –
Merci de votre attention, les gars. J'ai ajouté un peu plus de code ci-dessus, pour ce que ça vaut. @Jason: Oui, initWithSource (mon nom de méthode actuel) est déclaré dans l'en-tête, et il correspond certainement. – philsquared