采用这个简单的类层次结构:
树.h:
@interface Tree : NSObject
@property (nonatomic, assign) id<TreeDelegate> delegate;
@end
树.m:
@implementation Tree
@synthesize delegate;
@end
阿斯彭.h:
@interface Aspen : Tree
- (void)grow:(id<TreeDelegate>)delegate;
@end
阿斯彭.m:
@implementation Aspen
- (void) grow:(id<TreeDelegate>)d {
self.delegate = d;
}
@end
当我尝试这样做时self.delegate = d;
,我收到以下错误:
-[Aspen setDelegate:]: 无法识别的选择器发送到实例 0x586da00
我期望Tree
父类的delegate
属性对子类是可见的,但它似乎不是,因为错误表明父类的合成设置器不可见。
我错过了什么?我是否必须在子类级别重新声明该属性?我尝试@dynamic
在实现的顶部添加,Aspen
但这也不起作用。这里有一个如此简单的概念,但我已经浪费了一个小时来寻找解决方案。在这一点上没有想法。
- 编辑 -
上面的代码只是一个非常精简的示例,用于演示我所看到的问题。