接收方types***例如消息是前向声明

在我的iOS5应用程序,我有NSObject States类,并试图启动它:

 states = [states init]; 

这里是国家的init方法:

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

但是在行states = [states init];有错误states = [states init];

接收方types“States”例如消息是一个前向声明

这是什么意思? 我究竟做错了什么?

这基本上意味着你需要导入包含国家声明的.h文件。

但是,你的代码还有很多其他的东西是错误的。

  • 你正在启动一个没有+alloc的对象。 这是行不通的
  • 你声明一个对象是一个非指针types,这也是行不通的
  • 你不是在-init调用[super init]
  • 你已经在头文件中使用@class声明类,但从来没有导入类。

FWIW,当我将核心数据实现到现有项目时,出现了这个错误。 事实certificate,我忘了将CoreData.h链接到我的项目。 我已经将CoreData框架添加到我的项目中,但通过链接到我的预编译头文件中的框架解决了问题,就像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 

当我有两个相互依赖的文件时,我得到了这样的信息。 这里棘手的事情是,如果你只是试着从头文件中导入对方(A类inputB类,B类inputA类),你将得到一个循环引用。 所以你要做的是将一个forward( @class A )声明放在其中一个类(B类)的头文件中。 然而,在B类实现中尝试使用A类ivar的时候,这个错误就出现了,只是在B类的.m文件中增加一个#import "Ah"来解决这个问题。

对我来说,我使用@class“Myclass.h”

当我改为#import“Myclass.h”

它工作正常。

您正在使用

 States states; 

在哪里,你应该使用

 States *states; 

你的init方法应该是这样的

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

现在最后,当你要为国家class级创build一个对象时,你应该这样做。

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

我不是说这是做这件事的最好方法。 但是它可以帮助你理解初始化对象的基本用法。

检查是否导入了抛出此错误的类的头文件。

确保单元方法的原型在.h文件中。

因为您在文件中调用的方法比定义方法更高,所以您会收到此消息。 或者,您可以重新排列您的方法,以便调用者在文件中比调用的方法更低。

有两个相关的错误消息可能会告诉你声明和/或导入有问题。

第一个是你指的那个,它可以通过在你的.h(或.pch文件)中放置一个#import来生成,同时在.h中声明一个@class。

第二个你可能会看到,如果你有一个在你的国家类的方法,如:

 - (void)logout:(NSTimer *)timer 

添加#import后是这样的:

“States”没有可见的@interface声明select器“注销:”

如果您看到这一点,则需要检查并确定是否在要导入或转发的类的.h文件中声明了“注销”方法(在本例中)。

所以在你的情况下,你需要一个:

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

在你们国家class的.h中,使这些相关错误中的一个或两个消失。