2

我正在尝试将对象添加到“一对一”关系中:

//1. I create the temporary object for the ServerUpdates entity
NSManagedObject *updateObj = [NSEntityDescription insertNewObjectForEntityForName:@"ServerUpdates" inManagedObjectContext:self.managedObjectContext];

//2. I make sure that obj is in the same context (note: I get obj from fetch)
obj = [self.managedObjectContext objectWithID:[obj objectID]];

//3. I then try to add the object to the key - and this is where we get the error
[updateObj setValue:obj forKey:@"fkServerUpdatesToAuthors"];

我收到以下错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'一对一关系的值类型不可接受:属性=“fkServerUpdatesToAuthors”;所需类型 = NSManagedObject; 给定类型 =NSManagedObject; 价值=(实体:作者;id:0x74a2290

起初我以为这是因为我试图在持久对象和临时对象之间分配关系,但是当我在 1. 和 2. 之间添加保存时,我仍然得到同样的错误。

注意:
我没有为 NSManagedObject 创建任何关联的子类。关系设置为:ServerUpdates 实体中的 fkServerUpdatesToAuthors(一对一)与 Authors 实体中的 fkAuthorsToServerUpdates(一对多)的反向关系。

非常感谢任何帮助!

4

3 回答 3

2

我删除了 ServerUpdates 的 CoreData 实体,重新构建它并开始工作。

如果其他人遇到同样的问题:我认为原因是将不正确的 NSManagedObject 分配给 fkServerUpdatesToAuthors 关系属性。它期待一个“作者”NSManagedObject(在关系的“目标”字段中定义),但我必须传递一些不同的东西 - 例如“书籍”(反之亦然)。

错误消息不清楚,因为我抽象为使用 NSManagedObject 来访问对象(而不是 Authors 或 Books 子类),所以对于编译器来说,Authors 和 Books NSManagedObjects 都只是 NSManagedObjects。

总之,检查您是否将正确的 NSManagedObject 发送到“目标”字段中定义的关系。

希望这对将来的某人有所帮助。

于 2013-05-27T10:51:54.653 回答
1

我认为fkServerUpdatesToAuthors将只接受 NSSet 对象,因为它是一对多的关系。你应该试试:

[updateObj setValue:[NSSet setWithObject:obj] forKey:@"fkServerUpdatesToAuthors"];
于 2013-05-23T13:36:18.073 回答
0

实际上,当这些核心数据实体没有相应的自动生成文件时,这条愚蠢的消息确实向我展示了。当我为 xdatamodel 中的每个实体生成 NSManagedObject 时,一切都开始运行良好。

于 2013-10-23T15:08:42.033 回答