繁体   English   中英

核心数据:在哪里放awakeFromFetch和awakeFromInsert?

[英]Core Data: Where to put awakeFromFetch and awakeFromInsert?

我想覆盖awakeFromFetchawakeFromInsert

当我保持自动生成的NSManagedObject子类不变并将我的自定义代码放入类别时,我的问题是:

我在哪里放置awakeFromFetchawakeFromInsert以便正确调用这些方法?

如果您的托管对象子类文件是由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

您可能还想考虑生成器 它是一个命令行工具,可以为每个托管对象生成两个类,并确保在模型更改时永远不会覆盖自定义代码。

您必须在子类中实现它们。 如果所有子类的代码都相同,并且您希望避免将它们复制粘贴到每个子类中,我建议编写一个实现它们的NSManagedObjectNSManagedObject ,然后创建该类的特定实体类子类。

//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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM