設置超屬性把這個簡單的類層次結構:目標C - 不能在子類中
tree.h中:
@interface Tree : NSObject
@property (nonatomic, assign) id<TreeDelegate> delegate;
@end
Tree.m:
@implementation Tree
@synthesize delegate;
@end
Aspen.h:
@interface Aspen : Tree
- (void)grow:(id<TreeDelegate>)delegate;
@end
Aspen.m:
@implementation Aspen
- (void) grow:(id<TreeDelegate>)d {
self.delegate = d;
}
@end
當我嘗試做self.delegate = d;
,我發現了以下錯誤:
-[Aspen setDelegate:]: unrecognized selector sent to instance 0x586da00
我期待Tree
父類的delegate
屬性對於子類是可見的,但它似乎並不是因爲錯誤表明父類的合成設置器不可見。
我錯過了什麼?我是否必須在子類級別重新聲明該屬性?我試着在Aspen
執行的頂部添加@dynamic
,但那也不起作用。這樣一個簡單的概念,但我已經失去了一個小時尋找解決方案。此時出於想法。
- 編輯 -
上面的代碼只是一個非常精簡例子來證明我看到的問題。
我認爲我們需要實際的代碼 - 修復Aspen的implmentation錯字後,這對我來說工作得很好。 – Tim
@Tim Typo修正了,謝謝。所以 - 這應該按原樣工作? – Madbreaks
我無法發佈實際的代碼,但我更新了我的問題中的示例以更加真實地反映實際的代碼。 – Madbreaks