Core data CoreData:错误:未能调用NSManagedObject类上指定的初始值设定项';收集';

Core data CoreData:错误:未能调用NSManagedObject类上指定的初始值设定项';收集';,core-data,ios6,Core Data,Ios6,为了将一些逻辑封装到模型中,我计划将NSManagedObjectContext放在一个NSManagedObject模型中,以便在一个模型中处理许多常见逻辑: @interface Collect : NSManagedObject{ NSManagedObjectContext *managedObjectContext; } @property (nonatomic, retain) NSNumber *created_at; @property

为了将一些逻辑封装到模型中,我计划将NSManagedObjectContext放在一个NSManagedObject模型中,以便在一个模型中处理许多常见逻辑:

@interface Collect : NSManagedObject{
        NSManagedObjectContext *managedObjectContext;
    }

    @property (nonatomic, retain) NSNumber *created_at;
    @property (nonatomic, retain) NSString *name;

    - (void) initContext;
@end

@implementation Collect

    @dynamic created_at;
    @dynamic name;

    - (void) initContext{
        if (managedObjectContext == nil)
        {
           managedObjectContext = [MyAppDelegate managedObjectContext];
        }

    }
@end
我通过以下方式使用它:

Collect *collect = [[Collect new] autorelease];
[collect initContext];
但运行时显示:
CoreData:error:调用NSManagedObject类“Collect”上指定的初始值设定项失败。


我想知道如何正确地将NSManagedObjectContext实例添加到NSManagedObjectModel

您不能将托管对象上下文添加到托管对象,它的工作方式是相反的:您首先需要托管对象上下文,然后可以在此上下文中创建对象

例如,参见
NSManagedObjectContext
文档:

NSManagedObjectContext
的实例表示单个“对象” 应用程序中的“空格”或便笺簿。它的主要责任是 管理托管对象的集合。这些物体构成一个组 表示内部一致视图的相关模型对象的 一个或多个持久存储的单个托管对象实例存在于一个且仅存在于一个上下文中,但存在一个对象的多个副本 可以存在于不同的环境中

以及
NSManagedObject
文档:

如果直接实例化托管对象,则必须调用指定的初始值设定项 (
initWithEntity:insertIntoManagedObjectContext:

在ManagedObjectContext:中还有一个实用方法
insertNewObjectForEntityForName:inManagedObjectContext:
来创建新对象。例如:

Collect *collect = [NSEntityDescription insertNewObjectForEntityForName:@"Collect"
                    inManagedObjectContext:[MyAppDelegate managedObjectContext]];
(如果愿意,可以将其放入
Collect
的类方法中。)

请注意,
NSManagedObject
已经有了一个
managedObjectContext
方法来获取对象的上下文:

NSManagedObjectContect *context = [collect managedObjectContext];
因此,如果将实例变量
managedObjectContext
添加到托管对象类中,则没有必要这样做(甚至可能导致问题)