que posean un método init que toma un (id) argumento:¿Por qué tengo que lanzarme a la identificación?
-(id) initWithObject:(id) obj;
Estoy intentando llamar así:
[[MyClass alloc] initWithObject:self];
Pero XCode se queja el argumento de ser un "distinta Tipo Objective-C "(que generalmente indica una discrepancia de tipo o un nivel de error indirecto).
Si me lanzo explícitamente a (id), la advertencia desaparece. En cualquier caso, el código se ejecuta como se esperaba. Curiosamente, en la siguiente línea me estoy pasando a otro método que también toma una identificación, y eso funciona bien.
Me pregunto si me falta algo sutil, ¿o es una peculiaridad del compilador?
No me siento del todo cómodo simplemente lanzándolo hasta que esté seguro de las razones por las que es necesario.
[Editar]
Me han pedido para suministrar más código. No estoy seguro de que haya mucho más relevante. Aquí está mi código real que hace la llamada. Tenga en cuenta que es, en sí mismo, dentro de un método init. Es la llamada a initWithSource
que está dando la advertencia:
-(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;
}
Y aquí está el método init se llama:
-(id) initWithSource:(id) sourceObject
{
self = [super init];
if (self != nil)
{
// Uninteresting initialisation snipped
}
return self;
}
Es posible que desee publicar más código aquí; nada está saltando, pero con solo dos líneas para trabajar, es difícil de decir. –
De acuerdo con Ben, pero una cosa a tener en cuenta, ¿está declarado el método initWithObject? –
Gracias por mirar, muchachos. He agregado un poco más de código arriba, por lo que vale. @Jason: Sí, initWithSource (el nombre de mi método real) se declara en el encabezado y definitivamente coincide. – philsquared