[英]Core Data: Where to put awakeFromFetch and awakeFromInsert?
我想覆盖awakeFromFetch
和awakeFromInsert
。
当我保持自动生成的NSManagedObject
子类不变并将我的自定义代码放入类别时,我的问题是:
我在哪里放置awakeFromFetch
和awakeFromInsert
以便正确调用这些方法?
如果您的托管对象子类文件是由Xcode生成的,那么您还可以将这些方法放在托管对象子类的类别中,以便在Xcode中重新生成类文件时不会覆盖代码。
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
您可能还想考虑生成器 。 它是一个命令行工具,可以为每个托管对象生成两个类,并确保在模型更改时永远不会覆盖自定义代码。
您必须在子类中实现它们。 如果所有子类的代码都相同,并且您希望避免将它们复制粘贴到每个子类中,我建议编写一个实现它们的NSManagedObject
子NSManagedObject
,然后创建该类的特定实体类子类。
//MyManagedObject.h
@interface MyManagedObject : NSManagedObject
//...
@end
//MyManagedObject.m
@implementation
- (void)awakeFromFetch
{
//...
}
- (void)awakeFromInsert
{
//...
}
@end
//OneOfMyEntities.h
@interface OneOfMyEntities : MyManagedObject
//...
根据NSManagedObject类引用,您应该将它放在子类中 - 调用超级实现是必要的:
要点:子类必须在执行自己的初始化之前调用super的实现。
我觉得扩展是比子类更好的选择,因为在子类中,每当你生成时你需要再次更改父类...我希望这是更好的方法....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.