【发布时间】:2020-07-14 22:19:52
【问题描述】:
我有一些带有几个类的 Objective-C 代码。我正在尝试初始化第三类中的前两个类中的每一个。一个工作正常,在 Xcode 中变成正确的颜色并允许我跳转到定义。另一个由于某种原因没有。我已经倒过它,但看不出两者有什么区别。
MainClass.m:
#import "Class1.h"
#import "Class2.h"
@implementation MainClass
Class1 *class1 = [Class1 new];
Class2 *class2 = [Class2 new];
@end
Class1.h:
#ifndef Class1_h
#define Class1_h
@interface Class1 : NSObject
@end
#endif
Class2.h:
#ifndef Class2_h
#define Class2_h
@interface Class2 : NSObject
@end
#endif
Class1.h和Class2.h的头文件没有区别。两者都被导入 MainClass.m 但由于某种原因 Class2 在 MainClass.m 中无法识别,在 Build+Run 上产生“Initializer element is not a compile-time constant”,并且不允许我单击命令并跳转到定义。
我不知道从哪里看这一点。我已将 Class1.m 文件中的代码复制并粘贴到 Class2.m 中,仅更改 #import Class2.h 标头导入和 @implementation Class2 行以确保它不在 .m 文件中...问题仍然存在。
【问题讨论】:
-
您可能在其他地方有一个挥之不去的
#define或Class2_h。顺便说一句,我们一般不会在 Objective-C 中使用#ifndef/#define模式。 -
并且你需要在你的界面中定义实现的方法(即使你从继承的 NSObject 改变了 init),以便 Xcode 可以扫描标题并跳转到正确的。
-
看起来 mainClass.m 中的 #import "Class2.h" 不起作用。尝试了几十种建议的故障排除技术,现在一切似乎都正常了。谢谢!
标签: objective-c class header initialization