【问题标题】:NSManageObject subclass can't initialized by alloc?NSManageObject 子类不能被 alloc 初始化?
【发布时间】:2016-01-22 17:29:39
【问题描述】:

步骤:

首先,我在.xcdatamodelId 中添加一个名为Employee 的实体,然后单击-> 产品-> 创建的NSManageObject 子类。

在第一步之后,我得到了Employee.h/.m,其中的超类是NSManageObjectEmployee+CoreDataProperties.h/.m

然后我想将员工的信息保存到 Core Data,如下Employee.m

+ (void)saveModelWithName:(NSString *)name startTime:(NSDate *)startTime birth:(NSDate *)birth {
Employee *employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:[[CoreDataManager sharedInstance] managedObjectContext]];
if (name) {
    employee.name = name;
    employee.startDate = startTime;
    employee.birth = birth;
}
NSError *error = nil;
if (![[[CoreDataManager sharedInstance] managedObjectContext] save:&error]) {
    NSAssert(NO, @"Error saving context:%@\n%@",[error localizedDescription],[error userInfo]);
}

}
数据插入成功。而且我认为Employee 与自定义类相同,所以
我想使用这个类将数据保存在内存中 并尝试像初始化Employee 一样

Employee *Sam = [[Employee alloc] init];

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Employee'

我发现 NSManageObject 的文档说:

一个 NSEntityDescription 对象描述了 Core Data 中的一个实体。实体之于被管理的对象,就如同 Class 之于 id,或者——使用数据库类比——表之于行。实例指定实体的名称、属性(其属性和关系,由 NSAttributeDescription 和 NSRelationshipDescription 的实例表示)以及表示它的类。

我似乎无法使用 NSManageObject 类将模型保存在内存中。
我是否必须自定义一个与 Employee 子类 NSObject 具有相同属性的类?
请给我一些建议。

【问题讨论】:

    标签: objective-c core-data


    【解决方案1】:

    您可以,但仅限于插入到上下文中的实例。

    所以:

    1. 您插入一个对象,然后可以保留对它的引用以供以后使用(代码中的employee
    2. 您使用NSFetchRequest 从上下文中获取实例并保留以供以后使用

    您“不能”创建未插入上下文的实例 - 这是您得到错误的原因。您可以使用 init 方法,但它必须是 initWithEntity:insertIntoManagedObjectContext:(或其他在内部使用该方法的 init 方法)。

    以上是“不能”,因为从技术上讲,您可以在调用该 init 方法时将 nil 传递给上下文,但您应该这样做的理由很少......

    【讨论】:

    • 谢谢你的回答。它帮助我了解更多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2021-03-23
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多