ultimo texto puedo mini mensajes instalar enviar desde como app actualizar iphone ios objective-c forward-declaration

mini - no puedo enviar mensajes de texto desde mi iphone



tipo de receptor***, por ejemplo, el mensaje es una declaraciĆ³n directa (8)

Para mí estaba usando @class "Myclass.h"

Cuando cambié a # importar "Myclass.h"

funcionó bien

En mi aplicación iOS5, tengo la clase NSObject States y trato de iniciarla:

states = [states init];

aquí está el método init en los 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 directa

Qué significa eso? ¿Qué estoy haciendo mal?


Asegúrese de que el prototipo para su método de unidad esté en el archivo .h.

Como está llamando al método más arriba en el archivo de lo que lo está definiendo, obtiene este mensaje. Alternativamente, podría reorganizar sus métodos, de modo que las personas que llaman estén más abajo en el archivo que los métodos que llaman.


Compruebe si importó los archivos de encabezado de las clases que arrojan este error.


Eso básicamente significa que debe importar el archivo .h que contiene la declaración de estados.

Sin embargo, hay muchas otras cosas mal con su código.

  • Estás -initiendo un objeto sin +alloc . Eso no funcionará
  • Está declarando un objeto como un tipo no puntero, que tampoco funcionará
  • No estás llamando [super init] -init [super init] en -init .
  • Has declarado la clase con @class en el encabezado, pero nunca importaste la clase.

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 vinculándolo al marco en mi encabezado precompilado tal como lo hacen las plantillas de Apple:

#import <Availability.h> #ifndef __IPHONE_5_0 #warning "This project uses features only available in iOS SDK 5.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> #endif


Hay dos mensajes de error relacionados que pueden indicarle que algo está mal con las declaraciones y / o importaciones.

La primera es a la que se refiere, que puede generarse al NO poner un #import en su archivo .m (o .pch) mientras declara una clase @ en su .h.

El segundo que podría ver, si tuviera un método en su clase de Estados como:

- (void)logout:(NSTimer *)timer

después de agregar el #import es esto:

Ninguna interfaz @ visible para "Estados" declara el selector ''cerrar sesión:''

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 tu caso, necesitarías un:

- (void)logout:(NSTimer *)timer;

en el .h de su clase States para hacer desaparecer uno o ambos de estos errores relacionados.


Recibí este tipo de mensaje cuando tenía dos archivos que dependían el uno del otro. Lo difícil aquí es que obtendrá una referencia circular si solo intenta importar unos a otros (la clase A importa la clase B, la clase B importa la clase A) desde sus archivos de encabezado. Entonces, lo que harías es colocar una declaración hacia adelante ( @class A ) en uno de los archivos de encabezado de las clases (clase B). Sin embargo, cuando intento usar un ivar de la clase A dentro de la implementación de la clase B, aparece este mismo error, simplemente agregando un #import "Ah" en el archivo .m de la clase B me solucionó el problema.


Tu estas usando

States states;

donde como deberías usar

States *states;

Tu método init debería ser así

-(id)init { if( (self = [super init]) ) { pickedGlasses = 0; } return self; }

Ahora, finalmente, cuando va a crear un objeto para la clase States, debe hacerlo así.

State *states = [[States alloc] init];

No digo que esta sea la mejor manera de hacerlo. Pero puede ayudarlo a comprender el uso básico de los objetos de inicialización.