我有一个名为MyClass
的类,它有一个名为MyInnerClass
的小型嵌套内部类。实现文件如下所示(并且还包含嵌套内部类的ivar):
@class MyInnerClass;
@interface MyClass
{
MyInnerClass *myInnerClassIvar;
}
@property(nonatomic, retain) MyInnerClass *myInnerClassIvar;
@end
然后在实现文件中,我实现了MyClass
和MyInnerClass
。看起来如下:
@interface MyInnerClass
{
iVar *x;
}
@property(nonatomic, retain) iVar *x;
@end
@implementation MyInnerClass
@synthesize x;
...
@end
@implementation MyClass
@synthesize myInnerClassIvar;
...
@end
我现在正在为MyClass
创建一个子类,在其中我正在尝试这样调用:
self.myInnerClassIvar.x
我收到以下消息:
Property x cannot be found in in forward class object MyInnerClass *
我忘记了什么吗?之前没有实现内部类,看不出为什么这不起作用。
更新:我将MyInnerClass的界面移动到MyClass的.h,一切正常。这是一个很好的解决方案吗?
答案 0 :(得分:2)
我相信Objective-C在您尝试实现的意义上没有内部类。见SO。但关于你的问题......
在MyClass.h中没有提到MyInnerClass的iVars - 它是一个前向定义,即@class MyInnerClass因此MySubClass没有x的参考点。
如果你定义两个类MyClass& MyInnerClass(考虑到它可能是一件糟糕的事情) - 将它们放在两个单独的.h文件和两个独立的.m文件中(即正常)。在MyClass中创建一个MyInnerClass类型的@property。然后在MySubClass中你需要导入MyClass& MyInnerClass。
答案 1 :(得分:0)
我将MyInnerClass的界面移动到MyClass的.h文件中,如下所示:
MyClass.h
@class MyInnerClass;
@interface MyClass
{
MyInnerClass *myInnerClassIvar;
}
@property(nonatomic, retain) MyInnerClass *myInnerClassIvar;
@end
@interface MyInnerClass
{
iVar *x;
}
@property(nonatomic, retain) iVar *x;
@end
我会等到我作为答案检查之前等待,因为基于之前的答案,我知道有一些怀疑。我尝试这个的唯一原因是因为我在Apple示例SimpleTextInput中看到它,除了那个整个内部类在.m文件中。无论如何,有兴趣听听人们对此有什么看法,如果它可能会在以后产生不必要的副作用或者它的确定。