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

时间:2012-11-05 09:58:09

标签: objective-c ios core-data nsmanagedobject objective-c-category

我想覆盖awakeFromFetchawakeFromInsert

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

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

5 个答案:

答案 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)

我觉得扩展是比子类更好的选择,因为在子类中,每当你生成时你需要再次更改父类...我希望这是更好的方法....