我想覆盖awakeFromFetch
and awakeFromInsert
。
当我保持自动生成的NSManagedObject
子类不变并将我的自定义代码分类时,我的问题是:
我应该把这些方法放在哪里awakeFromFetch
,awakeFromInsert
以便正确调用这些方法?
我想覆盖awakeFromFetch
and 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
您可能还想考虑mogenerator。它是一个命令行工具,可为您的每个托管对象生成两个类,并确保您的自定义代码在模型更改时永远不会被覆盖。
根据 NSManagedObject 类参考,你应该把它放在一个子类中 - 调用超级实现是必要的:
Important: Subclasses must invoke super’s implementation before performing their own initialization.
你必须在你的子类中实现它们。如果所有子类的代码都相同,并且您希望避免将它们复制粘贴到每个子类中,我建议编写一个NSManagedObject
实现它们的子类,然后使您的特定实体类成为该类的子类。
//MyManagedObject.h
@interface MyManagedObject : NSManagedObject
//...
@end
//MyManagedObject.m
@implementation
- (void)awakeFromFetch
{
//...
}
- (void)awakeFromInsert
{
//...
}
@end
//OneOfMyEntities.h
@interface OneOfMyEntities : MyManagedObject
//...
我觉得扩展是比子类更好的选择,因为在子类中,每当你生成时,你都需要再次更改父类……我希望这是更好的方法……