我有一个名为 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 的接口(interface)移至 MyClass 的 .h 中,一切正常。这是一个好的解决方案吗?
最佳答案
我相信 Objective-C 没有您正在尝试实现的意义上的内部类。请参阅SO 。但关于你的问题...
在 MyClass.h 中没有提及 MyInnerClass 的 iVar - 它是一个前向定义,即 @class MyInnerClass 因此 MySubClass 没有 x 的引用点。
如果您定义两个类 MyClass 和 MyInnerClass (考虑到命名它可能是一件坏事......) - 将它们放在两个单独的 .h 文件和两个单独的 .m 文件中(即正常情况下)。在 MyClass 中创建一个 MyInnerClass 类型的 @property。然后在 MySubClass 中您需要导入 MyClass 和 MyInnerClass。
关于iphone - 在内部类中引用 iVar 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940570/