插入扩展抽象实体的实体时出错
Posted
技术标签:
【中文标题】插入扩展抽象实体的实体时出错【英文标题】:Error when inserting entities which extend an Abstract Entity 【发布时间】:2011-09-18 15:41:49 【问题描述】:我有以下实体:
User
。具有用户名、邮件等的通用用户实体。
ComputerUserWithAI
。与用户类似,但由应用程序控制。
Pick
。包含与Game
的关系,它应该包含一个选择器。
因为Picker
可以是User
或ComputerUserWithAI
,所以我创建了一个名为Picker
的Abstract Entity
,并创建了User
和ComputerWithAI
扩展了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 插入实体时出错