4

我想覆盖awakeFromFetchand awakeFromInsert

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

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

4

5 回答 5

8

如果你的托管对象子类文件是由 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
于 2012-11-05T12:13:21.843 回答
2

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

于 2013-01-11T20:17:06.637 回答
2

根据 NSManagedObject 类参考,你应该把它放在一个子类中 - 调用超级实现是必要的:

Important: Subclasses must invoke super’s implementation before performing their own initialization.

于 2013-08-23T18:51:33.497 回答
1

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

//MyManagedObject.h
@interface MyManagedObject : NSManagedObject
//...
@end

//MyManagedObject.m
@implementation
- (void)awakeFromFetch
{
    //...
} 
- (void)awakeFromInsert
{
    //...
}
@end


//OneOfMyEntities.h
@interface OneOfMyEntities : MyManagedObject
//...
于 2012-11-05T10:10:39.517 回答
0

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

于 2013-03-14T07:39:47.843 回答