在我正在进行的一个项目中,我们有多个持久存储,并且在实体上定义了获取的属性,以提供对不同存储中的对象的访问。
当我运行Editor
->Create NSManagedObject Subclass
时,获取的属性不会填充到子类中,因此无法在使用此实体的不同控制器中访问。
我的好奇心是如何在子类中定义这些对象以便可以使用它们。
例如,假设我在下面有一个名为“Some Object”的对象,并且该对象上有一个名为“imageFile”的获取属性(File 对象位于不同的存储中,因此无法直接引用)
class SomeObject: NSManagedObject {
@NSManaged var name: String
@NSManaged var id: String
@NSManaged var imageID: String
@NSManaged var imageFile: File //Not generated automatically like the rest
}
不幸的是,上述尝试失败并出现以下错误:
无法识别的选择器发送到实例 0x60800865de50
所以我的问题很简单,就是你如何访问 Fetched Properties,或者引用它们的语法是什么。
请不要回答说“不要使用提取的属性”或“只使用一个持久性存储”。我已经知道如何使用正常的关系并且想知道如何利用 Core Data 的这个特性。提前致谢!
更新
尝试下面发布的一些解决方案,我遇到了一些可能有帮助的有趣信息。我使用“po someObject”打印出对象,并惊讶地在数据属性下的输出中看到以下内容:
imageFile = "<relationship fault: 0x618000043930 'imageFile'>";
imageID = "some Id"
但是,当尝试使用 someObject.imageFile 访问 imageFile 时,我无法访问它。使用 valueForKey["imageID"] 我可以获得参考,但每次都无法转换为 File。打印出对象时,我得到:
Optional(Relationship fault for (<NSFetchedPropertyDescription: 0x6180000e1780>), name imageFile, isOptional 1, isTransient 1, entity SomeObject...
最终更新
将valueForKey["imageID"]
触发故障并获取属性,我在我的xcdatamodelid
文件中翻转了属性,这就是为什么它一开始没有找到它。