我可以像处理常规NSObject一样处理NSManagedObject吗?

时间:2012-11-18 20:30:04

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

我是core data的新手,我正试图了解如何使用NSManagedObjects。基本上我有几个我打算用core data存储的对象(彼此之间有关系)。

在查看核心数据之前,我编写了一个由3 NSObjects组成的基本模型,现在我创建了一个core data model并从此模型中生成了3 NSManagedObjects。我在现有的3 NSObjects中有一些逻辑(例如指定的初始化器和专门的getter和setter),我仍然想要使用它。

我的问题是,我是否可以将逻辑从3 NSObjects直接转移到3 NSManagedObjects,然后像我在原始设计中那样使用它们(还有额外的好处,可以轻松坚持他们),或者我是否需要同时保留NSObjectsNSManagedObject

请有人就最佳设计方法提出建议,我希望尽可能保持我的代码干净整洁。

提前致谢!

2 个答案:

答案 0 :(得分:8)

由于NSManagedObject继承自NSObject,如果您只是将自定义类的超类从NSObject更改为NSManagedObject,则不会失去功能 - 前提是您不要没有与NSManagedObject冲突的方法/属性名称。这样您就不必保留orignal类,使代码更清晰,逻辑更简单。

答案 1 :(得分:6)

当我必须为NSManagedObject添加额外的功能时,我创建类别并将其保存在单独的文件中,因为当我修改.xcdatamodeld文件时,我通常会覆盖NSManagedObject子类,而不是手动更新更新的文件。

优惠+ Localized.h:

#import "Offer.h"
@interface Offer (Localized)
- (NSString *) localizedPrice;
@end

优惠+ Localized.m:

@implementation Offer (Localized)

- (NSString *) localizedPrice;
{
    if ( self.price > 0 ) {
        return [NSString stringWithFormat:NSLocalizedString(@"Price: %d", nil), self.price];
    } else {
        return NSLocalizedString(@"Free", nil);
    }
}

@end