Sen*_*neL 197 iphone objective-c forward-declaration ios
在我的iOS5应用程序中,我有NSObject States类,并尝试初始化它:
states = [states init];
Run Code Online (Sandbox Code Playgroud)
这里的init方法是States:
- (id) init
{
if ((self = [super init]))
{
pickedGlasses = 0;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
但是线路上有错误 states = [states init];
接收器类型"States"例如message是一个前向声明
这是什么意思?我究竟做错了什么?
Cat*_*Man 434
这基本上意味着您需要导入包含States声明的.h文件.
但是,您的代码还有很多其他问题.
+alloc它就是一个物体.那不行[super init]在打电话-init.@class在标头中声明了类,但从未导入该类.cap*_*kaw 27
FWIW,我在将核心数据实施到现有项目时遇到了这个错误.事实证明我忘了将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
Run Code Online (Sandbox Code Playgroud)
Stu*_*ner 23
当我有两个相互依赖的文件时,我收到了这种消息.这里很棘手的是,如果你只是尝试从它们的头文件中互相导入(A类导入B类,B类导入A类),那么你将获得循环引用.那么你要做的是@class A在一个类(B类)头文件中放置一个forward()声明.但是,当尝试在B类的实现中使用类A的ivar时,出现了这个错误,只是#import "A.h"在B类的.m文件中添加一个修复了我的问题.
如果您在尝试在 Objective C 中使用 Swift 类或方法时遇到此错误:您忘记了 Apple 在此图上定义的 2 个步骤之一:
您的文件中出现错误Test.m:
类消息的接收者“MyClass”是前向声明
第 1 步:检查是否Test.h有
@class MyClass;
Run Code Online (Sandbox Code Playgroud)
第2步:在“构建设置”中找到*-Swift.h文件名(查找Objective-C 生成的接口标头名称)。名字会是这样的MyModule-Swift.h
第3步:检查是否Test.m导入了上述标头
#import <MyModule/MyModule-Swift.h>
Run Code Online (Sandbox Code Playgroud)
MyClass(或其基类)继承NSObject类。@objc位于要从 Obj-C 调用的每个方法之前。您正在使用
States states;
Run Code Online (Sandbox Code Playgroud)
你应该在哪里使用
States *states;
Run Code Online (Sandbox Code Playgroud)
你的init方法应该是这样的
-(id)init {
if( (self = [super init]) ) {
pickedGlasses = 0;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
最后,当你要为States类创建一个对象时,你应该这样做.
State *states = [[States alloc] init];
Run Code Online (Sandbox Code Playgroud)
我并不是说这是最好的方法.但它可以帮助您理解初始化对象的基本用法.