我想覆盖awakeFromFetch
和awakeFromInsert
。
当我保留自动生成的NSManagedObject
子类并将我的自定义代码放入类别时,我的问题是:
我在哪里放置awakeFromFetch
和awakeFromInsert
以便正确调用这些方法?
答案 0 :(得分:8)
如果您的托管对象子类文件是由Xcode生成的,那么您也可以将这些方法放在托管对象子类的类别中,以便在Xcode中重新生成类文件时不会覆盖代码。 p>
<强> myEntity所+ Extensions.h 强>
#import "MyEntity.h"
@interface MyEntity (Extensions)
@end
<强> myEntity所+ Extensions.m 强>
#import "MyEntity+Extensions.h"
@implementation MyEntity (Extensions)
- (void)awakeFromFetch
{
}
- (void)awakeFromInsert
{
}
@end
答案 1 :(得分:2)
您可能还想考虑mogenerator。它是一个命令行工具,可以为每个托管对象生成两个类,并确保在模型更改时不会覆盖自定义代码。
答案 2 :(得分:1)
您必须在子类中实现它们。如果所有子类的代码都相同,并且您希望避免将它们复制粘贴到每个子类中,我建议编写一个实现它们的NSManagedObject
子类,然后创建特定的实体类子类那个班。
//MyManagedObject.h
@interface MyManagedObject : NSManagedObject
//...
@end
//MyManagedObject.m
@implementation
- (void)awakeFromFetch
{
//...
}
- (void)awakeFromInsert
{
//...
}
@end
//OneOfMyEntities.h
@interface OneOfMyEntities : MyManagedObject
//...
答案 3 :(得分:1)
根据NSManagedObject类引用,您应该将它放在子类中 - 调用超级实现是必要的:
重要:子类必须在执行自己的初始化之前调用super的实现。
答案 4 :(得分:0)
我觉得扩展是比子类更好的选择,因为在子类中,每当你生成时你需要再次更改父类...我希望这是更好的方法....