Ios 如何在NSManagedObject子类中定义获取的属性

Ios 如何在NSManagedObject子类中定义获取的属性,ios,swift,core-data,fetched-properties,Ios,Swift,Core Data,Fetched Properties,在我正在处理的一个项目中,我们有多个持久存储,在实体上定义了获取的属性,以提供对位于不同存储中的对象的访问 当我运行Editor->创建NSManagedObject子类时,获取的属性不会在子类中填充,因此在使用此实体的不同控制器中无法访问 我的好奇心是如何在子类中定义这些对象,以便可以使用它们 例如,假设下面有一个名为“some object”的对象,该对象上有一个名为“imageFile”的获取属性(File对象位于不同的存储中,因此无法直接引用) 不幸的是,上述尝试失败,出现以下错误: 无

在我正在处理的一个项目中,我们有多个持久存储,在实体上定义了获取的属性,以提供对位于不同存储中的对象的访问

当我运行
Editor
->
创建NSManagedObject子类
时,获取的属性不会在子类中填充,因此在使用此实体的不同控制器中无法访问

我的好奇心是如何在子类中定义这些对象,以便可以使用它们

例如,假设下面有一个名为“some object”的对象,该对象上有一个名为“imageFile”的获取属性(File对象位于不同的存储中,因此无法直接引用)

不幸的是,上述尝试失败,出现以下错误:

无法识别的选择器发送到实例0x60800865de50

所以我的问题很简单,就是如何访问获取的属性,或者引用它们的语法是什么

请不要回答“不要使用获取的属性”或“只使用一个持久存储”。我已经知道如何使用正常关系,并且想知道如何利用核心数据的这一特性。提前谢谢

更新

在尝试下面发布的一些解决方案时,我遇到了一些可能会有所帮助的有趣信息。我使用“po someObject”打印出该对象,并惊讶地看到数据属性下的输出中有以下内容:

imageFile = "<relationship fault: 0x618000043930 'imageFile'>";
imageID = "some Id"
imageFile=”“;
imageID=“一些Id”
但是,当尝试使用someObject.imageFile访问imageFile时,我无法访问它。使用valueForKey[“imageID”]我可以获得一个引用,但每次转换到文件时都失败。打印对象时,我得到:

Optional(Relationship fault for (<NSFetchedPropertyDescription: 0x6180000e1780>), name imageFile, isOptional 1, isTransient 1, entity SomeObject...
可选(()的关系错误、名称imageFile、等选项1、isTransient 1、实体SomeObject。。。
最终更新


valueForKey[“imageID”]
将触发故障并获取属性,我在我的
xcdatamodelid
文件中翻转了属性,这就是为什么它最初找不到它的原因。

如果要将其添加到与NSManagedObject相同的类中,可以使用扩展功能:

extension SomeObject{
  var imageFile: String {
    get {// Code to return your fetchedProperty
    }
  }
}

在Objective-C中,您可以在 类别位于某个对象上,但Swift中不存在类似的内容 (据我所知)

因此,唯一的可能性是使用键值编码来检索 获取的属性(始终表示为数组):

当然,您可以按照建议将其包装到计算属性中
在@gutenmorgenuhu的回答中。

我有这个NSManagedObject的扩展名,但是我应该在请求的返回值中放什么?我需要写一个获取请求来访问它吗?这取决于你的值存储在哪里以及如何获取。核心数据xcdatamodelid文件中定义了一个获取的属性。“文件”实体存储在与“某个对象”实体不同的持久存储中。获取的属性表示为数组,因此您必须将其强制转换为
[文件]
。然后您可以检索一些(例如,第一个)数组的元素。成功了!我在fetchedProperty中翻转了属性,这就是它第一次没有访问的原因。谢谢!
extension SomeObject{
  var imageFile: String {
    get {// Code to return your fetchedProperty
    }
  }
}
if let files = yourObject.valueForKey("imageFile") as? [File] {
    // ...
}