En mi aplicación iOS5, tengo NSObject
States
clase e intento iniciarla:
states = [states init];
Aquí hay un init
método en States
:
- (id) init
{
if ((self = [super init]))
{
pickedGlasses = 0;
}
return self;
}
Pero hay un error en la línea. states = [states init];
tipo de receptor "Estados", por ejemplo, el mensaje es una declaración de reenvío
Qué significa eso? ¿Qué estoy haciendo mal?
iphone
ios
objective-c
forward-declaration
Centinela
fuente
fuente
Respuestas:
Eso básicamente significa que necesita importar el archivo .h que contiene la declaración de Estados.
Sin embargo, hay muchas otras cosas mal con su código.
+alloc
tenerlo. Eso no va a funcionar[super init]
en-init
.@class
el encabezado, pero nunca importaste la clase.fuente
.h
archivo debido a un problema de referencia circular.NSObject
.FWIW, recibí este error cuando estaba implementando datos básicos en un proyecto existente. Resultó que olvidé vincular CoreData.h a mi proyecto. Ya había agregado el marco CoreData a mi proyecto, pero resolví el problema al vincularlo al marco en mi encabezado precompilado al igual que las plantillas de Apple:
fuente
Recibí este tipo de mensaje cuando tenía dos archivos que dependían el uno del otro. Lo complicado aquí es que obtendrá una referencia circular si solo trata de importarse entre sí (la clase A importa la clase B, la clase B importa la clase A) desde sus archivos de encabezado. Entonces, lo que haría es colocar una
@class A
declaración forward ( ) en el archivo de encabezado de una de las clases (clase B). Sin embargo, cuando intento usar un ivar de clase A dentro de la implementación de la clase B, aparece este mismo error, simplemente agregar un#import "A.h"
en el archivo .m de la clase B me solucionó el problema.fuente
Yo estaba tratando de usar
@class "Myclass.h"
.Cuando lo cambié a
#import "Myclass.h"
, funcionó bien.fuente
@class "Myclass.h"
es completamente incorrecta.@class Myclass
debe usarse en un archivo de encabezado donde la clase no puede importarse (debido a referencias circulares, como ocurriría con una clase definida por Swift en Objective-C) pero#import "Myclass.h"
debe usarse si puede importarse.Tu estas usando
donde como deberías usar
Tu método init debería ser así
Ahora, finalmente, cuando va a crear un objeto para la clase de Estados, debe hacerlo así.
No digo que esta sea la mejor forma de hacerlo. Pero puede ayudarlo a comprender el uso muy básico de inicializar objetos.
fuente
Si recibe este error al intentar utilizar la clase o método Swift en el Objetivo C : olvidó uno de los 2 pasos que Apple definió en este diagrama:
Ejemplo:
El error aparece en su
Test.m
archivo:Paso 1: compruebe que
Test.h
tienePaso 2: busque
*-Swift.h
el nombre del archivo en Configuración de compilación (busque el Nombre del encabezado de la interfaz generada por Objective-C ). El nombre será algo comoMyModule-Swift.h
Paso 3: comprueba que
Test.m
importa el encabezado anteriorfuente
Compruebe si importó los archivos de encabezado de las clases que arrojan este error.
fuente
Asegúrese de que el prototipo para el método de su unidad esté en el archivo .h.
Como está llamando al método más alto en el archivo de lo que lo está definiendo, recibe este mensaje. Alternativamente, puede reorganizar sus métodos, de modo que las personas que llaman sean más bajas en el archivo que los métodos que llaman.
fuente
Hay dos mensajes de error relacionados que pueden indicarle que algo está mal con las declaraciones y / o importaciones.
El primero es al que se refiere, que puede generarse al NO poner una #importación en su .m (o archivo .pch) mientras declara una @clase en su .h.
El segundo que puede ver, si tuviera un método en su clase de Estados como:
después de agregar #import es esto:
Si ve esto, debe verificar y ver si declaró su método de "cierre de sesión" (en este caso) en el archivo .h de la clase que está importando o reenviando.
Entonces, en su caso, necesitaría un:
en la clase .h de su estado para hacer que uno o ambos errores relacionados desaparezcan.
fuente