【问题标题】:Custom init for a NSManagedObject subclassNSManagedObject 子类的自定义初始化
【发布时间】:2012-08-29 13:50:56
【问题描述】:

如何为NSManagedObject 子类编写自定义init?例如,我想要initItemWithName:Volume: 之类的东西。其中Item 是具有两个属性namevolumeNSManagedObject 子类。

【问题讨论】:

标签: objective-c ios core-data nsmanagedobject


【解决方案1】:

卡洛斯,

按照 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 代码示例中找到更多信息。此外,还可以在斯坦福观看 iTunes 上的免费视频(如果您有 Apple ID)。

希望对您有所帮助。

附:为了简单起见,我假设nameNSStringvolumeNSNumber。对于volume,最好使用NSDecimalNumber 类型。

【讨论】:

  • 非常感谢 Flex_Addicted!但是,有一个问题:为什么我们要在一个类别而不是NSManagedObject 子类中创建这些方法?我有几个课程,我至少需要 7 个类别。
  • 您可以在stackoverflow.com/questions/9297101/…blog.chrismiles.info/2011/06/organising-core-data-for-ios.html 找到信息(我非常喜欢后者的提示)。如果您使用 Xcode 为托管对象生成自定义类的简单解释:如果您修改实体中的某些内容,然后生成类以适应这些更改,Xcode 将覆盖您在原始子类中编写的代码。
猜你喜欢
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多