【问题标题】:Unacceptable type of value for to-one relationship: desired type = NSManagedObject; given type = NSManagedObject;一对一关系不可接受的值类型:期望类型 = NSManagedObject;给定类型 = NSManagedObject;
【发布时间】:2013-05-23 10:10:48
【问题描述】:

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

//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; value = (entity: Authors; id: 0x74a2290

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

注意:
我还没有为 NSManagedObject 创建任何关联的子类。关系设置为:ServerUpdates 实体中的 fkServerUpdatesToAuthors (to-one) INVERSE RELATIONSHIP WITH fkAuthorsToServerUpdates (to-many) 在 Authors 实体中。

非常感谢任何帮助!

【问题讨论】:

    标签: ios objective-c core-data nsmanagedobject


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      [updateObj setValue:[NSSet setWithObject:obj] forKey:@"fkServerUpdatesToAuthors"];
      

      【讨论】:

      • 就 fkServerUpdatesToAuthors 而言,这是一对一的关系。我删除了 CoreData 实体并重新构建它,它开始使用上面的代码,所以我认为那里的配置不正确。不过谢谢!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-28
        • 2019-06-19
        • 2014-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多