NSManagedObject子类的自定义init

时间:2012-08-29 13:50:56

标签: objective-c ios core-data nsmanagedobject

如何为init子类编写自定义NSManagedObject代码?我想要像initItemWithName:Volume:这样的东西。其中ItemNSManagedObject子类,其中包含两个属性namevolume

1 个答案:

答案 0 :(得分:6)

卡洛斯,

正如 Nenad Mihajlovic 建议您可以为此创建一个类别。

因此,例如,如果您有一个Item类,则可以创建一个名为Item+Management的类别,并将创建代码放在那里。在这里你可以找到一个简单的例子。

// .h

@interface Item (Management)

+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context;

@end

// .m

+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context
{
    Item* item = (Item*)[NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context];
    theItem.name = theName;
    theItem.volume = theVolume;

    return item;
}

如果要创建新项目,请执行

之类的导入
#import "Item+Management.h"

并像这样使用

Item* item = [Item itemWithName:@"test" volume:[NSNumber numberWithInt:10] inManagedObjectContext:yourContext];
// do what you want with item...

这种方法非常灵活,在应用程序开发过程中非常容易维护。

您可以在Stanford Course Lecture 14代码示例中找到更多信息。此外,请参阅Stanford在iTunes上的免费视频(如果您有Apple ID)。

希望有所帮助。

P.S。为简单起见,我认为nameNSStringvolumeNSNumber。对于volume,最好使用NSDecimalNumber类型。