我想解决如何注入资源到NSManagedObject子类实例,但找不到合理的方法。注入资源到NSManagedObject子类实例
简而言之,我有一个对象,它表示一个实体的行为方法需要的服务。此服务需要在运行时可用。
在Plain-Old-Objective-C-Object中,我只是简单地将这个对象作为构造函数参数传递,或者在构造后通过属性设置它。与多少个对象需要和使用一个委托类似。
但是,awakeFromInsert和awakeFromFetch显然不带任何参数,我也找不到任何地方挂钩到NSManagedObjectContext来配置NSManagedObjects后期初始化。
有没有人有解决方案?
作为一个完全人为的例子:
@interface ProductEntity : NSManagedObject
@property (nonatomic, retain) NSNumber *unitPrice;
@property (nonatomic, retain) MyTaxCalculatorService *taxCalculatorService;
- (void)grossPriceForUnits:(NSUInteger)units;
@end
@implementation ProductEntity
@dynamic unitPrice;
@synthesize taxCalculatorService
- (void)grossPriceForUnits:(NSUInteger)units
{
return [self.taxCalculatorService grossAmountForUnitPrice:self.unitPrice quantity:units];
}
@end
无视这是否是计算总价格(这是一个人为的例子)的最佳方式,我怎么会得到taxCalculatorService到例如ProductEntity?我无法覆盖init,并且我无法找到任何可以一致调用的实体[entity setTaxCalculatorService:service]。
想法?
你说的是“服务”类的单个共享实例还是每个对象都有自己的实例? – jrturton
每个实体都有一个对服务实例的引用。有些可能会分享,有些可能不会。在我设计的例子中,你可以想象有些产品的税收计算策略与其他产品不同。 –