天天看点

【iOS】CoreData对象关联时,自动生成的关联属性类型不对CoreData

CoreData

【问题】建了两个Entities,可是自动生成的relationships在.h文件里类型为NSManageObject而不是想要的类别。

【在.xcdatamodeld文件中建立关联对象时,一定要手动选中Inverse中被关联的目标属性】

【缘由】

在建立relationships的时候,xcode5会尝试“自动”关联。举个例子,如下两个Entities:BBUCoreDataEquip BBUCoreDataStage

BBUCoreDataEquip 新建一个指向 BBUCoreDataStage的Relationship叫stage。第一次添加的时候Inverse选项自动是No Inverse

【iOS】CoreData对象关联时,自动生成的关联属性类型不对CoreData
【iOS】CoreData对象关联时,自动生成的关联属性类型不对CoreData

图一

再给BBUCoreDataStage新建一个指向 BBUCoreDataEquip 的Relationship叫equips。此时xcode5会自动关联到stage。

【iOS】CoreData对象关联时,自动生成的关联属性类型不对CoreData
【iOS】CoreData对象关联时,自动生成的关联属性类型不对CoreData

图二

回头看BBUCoreDataEquip 里的stage,Inverse选项依然是No Inverse,你只能手动选择关联到equips。问题就出在这里了,本来想让 BBUCoreDataStage的equips属性是BBUCoreDataEquip类型,可是自动生成的BBUCoreDataStage.h 里的却是NSManagedObject类型。

编译代码时就会发现以前都没怎么关注的自动生成的CoreData对象,现在出了一堆编译warning。

【解决】

方法1. 手工改动BBUCoreDataStage.h 文件,把属性类型改成BBUCoreDataEquip类型,别忘了在头文件正式代码第一行写上@class BBUCoreDataEquip 

方法2. “重选一次!”。在图二中用鼠标重新选中一次equips的Inverse为stage,然后再从xcode5的菜单Editor->Create NSManagedObject SubClass...自动生成CoreData类。是的“重选一次”。