我想向派生自NSManagedObject的類添加其他行爲,並且有4個不同的行爲組(現在)。我不需要我的裝飾類繼承CoreData - 它純粹是爲了添加運行時行爲。將裝飾器添加到派生自NSManagedObject的類
但是,如果我嘗試應用標準Decorator模式,我不能叫「[超級初始化]」,因爲你需要插入新的對象進入ManageObjectContext這是有道理的。但我想你會想要在WindowClassScrollDecorator的init中調用[super init],同樣,後面的'dealloc'也會調用初始化&正確清理。
我是從「MyWindowClass」類繼承,因爲我不希望我的客戶端類知道亞型,但根據所使用的裝飾,行爲會有所不同的事情。
那麼有什麼方法可以解決這個問題?
@interface MyWindowClass : NSManagedObject
{
}
@end
@interface WindowClassScrollDecorator: MyWindowClass
{
MyWindowClass *decoratedClass;
}
- (id)initWithMyWindowClass:(MyWindowClass *)aWindowClass;
@end
@implementation WindowClassScrollDecorator
- (id)initWithMyWindowClass:(MyWindowClass *)aWindowClass
{
// Calling [super init] elicits the following error:
// Failed to call designated initializer on NSManagedObject class 'ModelClassScrollDecorator'
if (self = [super init])
{
// do some initialization work here
self.decoratedClass = aWindowClass;
}
}
@end
我需要「MyWindowClass」是一個NSManagedObject類,我需要在運行時應用的四種不同類型的行爲的一個這個類。然後我問的是,你如何應用不同的運行時行爲?如果我使用協議,則會有4種不同的協議,但仍然需要一個適用特定協議的中間類。或者這個可以在xcdatamodel類中註釋的東西? – 2009-09-25 01:27:18
同樣,我會說它應該是一個具有NSManagedObject的類,而不是NSManagedObject。如果裝飾器不是一個,那麼它不應該繼承該類(一直沿着類層次結構)。 你基本上在這裏說的是,你想要一些後裔像NSManagedObject和其他人不是。這意味着這些後代應該這樣做,而不是基礎班。 如果您使用的是協議,那麼您將擁有該協議的一個協議和四個實現。那些NSManagedObjects會繼承那個類。 – groundhog 2009-09-25 23:25:17