插入扩展抽象实体的实体时出错

Posted

技术标签:

【中文标题】插入扩展抽象实体的实体时出错【英文标题】:Error when inserting entities which extend an Abstract Entity 【发布时间】:2011-09-18 15:41:49 【问题描述】:

我有以下实体:

User。具有用户名、邮件等的通用用户实体。 ComputerUserWithAI。与用户类似,但由应用程序控制。 Pick。包含与Game 的关系,它应该包含一个选择器。

因为Picker 可以是UserComputerUserWithAI,所以我创建了一个名为PickerAbstract Entity,并创建了UserComputerWithAI 扩展了Picker 类。 添加Picker 实体后,我使Pick 与称为picker 的Picker 实体建立了关系。

一切正常,但我无法将ComputerUserWithAI 插入Pick。我的代码是这样的:

ComputerUserWithAI *userWithAI = [NSEntityDescription insertNewObjectForEntityForName:@"ComputerUserWithAI" inManagedObjectContext:ctx];
userWithAI.name = @"DeepBlue";

Pick *pick = [NSEntityDescription insertNewObjectForEntityForName:@"Pick" inManagedObjectContext:ctx];
pick.game = game;
pick.picker = userWithAI;

我得到的错误如下:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'不可接受的值类型 一对一关系:property = "picker";所需类型 = 选择器;给定 类型 = NSManagedObject;价值=(实体: ComputerUserWithAI...

但是当我这样做时:

pick.picker = [NSEntityDescription insertNewObjectForEntityForName:@"Picker" inManagedObjectContext:ctx];

确实有效。

我检查了从核心数据生成的类,它们正确地扩展了抽象实体。可能有什么问题?

【问题讨论】:

【参考方案1】:

发现错误。生成的Pick.h 具有以下内容:

@class Picker
@interface Pick : NSManagedObject

@property (nonatomic, retain) NSManagedObject *game;
@property (nonatomic, retain) Picker *picker;

改成:

@interface Pick : NSManagedObject

@property (nonatomic, retain) NSManagedObject *game;
@property (nonatomic, retain) NSManagedObject *picker;

让一切正常。

尝试验证 Xcode 生成的代码。这发生在我使用 Xcode 4.2 时。

【讨论】:

以上是关于插入扩展抽象实体的实体时出错的主要内容,如果未能解决你的问题,请参考以下文章

与 FOSUserBundle 和易于扩展的自定义实体创建关系时出错

使用 Spring Boot 和 Neo4j 通过 REST API 插入实体时出错

尝试使用 Hibernate 持久化实体时出错(MappingException:未知实体)

EF Core - 添加相关实体时出错

接口与抽象类的区别

在插入,更新或删除操作期间,在实体上找不到属性?