NSManagedObject 子类的自定义初始化
Posted
技术标签:
【中文标题】NSManagedObject 子类的自定义初始化【英文标题】:Custom init for a NSManagedObject subclass 【发布时间】:2012-08-29 13:50:56 【问题描述】:如何为NSManagedObject
子类编写自定义init
?例如,我想要initItemWithName:Volume:
之类的东西。其中Item
是具有两个属性name
和volume
的NSManagedObject
子类。
【问题讨论】:
看看下面的问题***.com/questions/10489578/…。我可能会帮助你。 @NenadMihajlovic +1。好评论! 【参考方案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)。
希望对您有所帮助。
附:为了简单起见,我假设name
是NSString
,volume
是NSNumber
。对于volume
,最好使用NSDecimalNumber
类型。
【讨论】:
非常感谢 Flex_Addicted!但是,有一个问题:为什么我们要在一个类别而不是NSManagedObject
子类中创建这些方法?我有几个课程,我至少需要 7 个类别。
您可以在***.com/questions/9297101/… 和blog.chrismiles.info/2011/06/organising-core-data-for-ios.html 找到信息(我非常喜欢后者的提示)。如果您使用 Xcode 为托管对象生成自定义类的简单解释:如果您修改实体中的某些内容,然后生成类以适应这些更改,Xcode 将覆盖您在原始子类中编写的代码。
以上是关于NSManagedObject 子类的自定义初始化的主要内容,如果未能解决你的问题,请参考以下文章
如何为子类 NSManagedObject 正确实现自定义初始化程序