【问题标题】:Protocol Inception ObjC协议初始对象
【发布时间】:2013-05-24 23:04:11
【问题描述】:

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

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 个未知类型和解析问题的错误。即使在任意类中,例如(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

状态未知,aDelegate 未知。原因也不清楚。

【问题讨论】:

  • 坦率地说,我不太明白。你说你没有找到协议声明,但 x1.h “有协议”,你相信你可以通过将 x1.h 包含到 x2.h 中来修复它(你有充分的理由想要避免)。但是如果协议在x1.h中,为什么找不到呢?
  • 可能会提供编译器错误和代码,以便我们准确了解您在做什么。

标签: objective-c protocols


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你必须关闭 x3 声明

    @end
    

    你的枚举被命名为 States,而不是 State

    否则我看不出这段代码有任何问题。

    【讨论】:

      【解决方案3】:

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

      所以解决方案正如 LuisEspinoza 建议的那样。

      长答案:有一个 .h 文件 (a.h) 可以导入一大堆常用的 .h 文件。它还定义了一大堆常用的枚举。我需要在 a.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”时,您应该考虑寻找循环导入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-17
        • 2015-10-23
        • 1970-01-01
        • 2014-01-08
        相关资源
        最近更新 更多