协议启动ObjC

时间:2012-03-16 16:45:18

标签: objective-c protocols

我的类标题找不到在“外部”定义的另一个标头中声明的协议。 结构如下:

x1.h有协议
x2.h导入x1.h
x3.h导入x2.h

问题是,x3.h无法找到协议。

我想避免在x3.h中导入x1.h以减少重复

错误是“Parse Issue Expected a type”

我有一个跑步状态。但是在我将一些#import从x3.m复制到x2.h之后,出现了100个包含Unknown Type和Parse Issue的错误。即使在任意类别,例如(y42.m)是错误。奇怪的是,类y42.m导入x3.h并且不知道x3。

感谢阅读!

更多信息:x1.h内容

@protocol aDelegate <NSObject>

- (void)callback;

@end

x2.h内容

#import "x1.h"

typedef enum {
    kOne,
    kTwo,
    kThree,
}States;

x3.h内容

#import "x2.h"

@interface x3 : NSObject <aDelegate>
{
    States anyState;
}

@end

状态未知,且未知门槛不明。原因也不得而知。

3 个答案:

答案 0 :(得分:0)

我认为我们需要更多关于错误的信息,但我修复了一个类似的问题,在一个单独的标题(只有协议)(x4.h)中声明协议,并将其导入所需的类中。有了这些信息,这是唯一的建议。

答案 1 :(得分:0)

您必须使用

关闭x3声明
@end

您的枚举名称为状态,而非状态

否则我认为此代码没有任何问题。

答案 2 :(得分:0)

我遇到了类似的问题,但错误信息相同。简短的回答:我有一个循环导入。

所以解决方案就像LuisEspinoza所说的那样。

答案很长:有一个.h文件(a.h)可以导入一大堆常用的.h文件。它还定义了一大堆常用的枚举。我在其中一个导入的.h文件(b.h)中需要其中一个枚举。所以,不假思索地,我在b.h中导入了“a.h”。 XCode将此报告为“Parse Issue Expected a type”的众多实例。我将枚举提取到c.h并在a.h和b.h中导入,这是Luis建议的。

所吸取的教训是,当XCode报告“Parse Issue Expected a type”时,您应该考虑寻找循环导入。