我无法根据与谓词的关系从核心数据中获取实体

I'm having trouble fetching entities from core data based on relationships with predicates

快速背景知识:我有一个 ExamEntity,它通过关系链接到考试中涵盖的部分(SectionEntity),它通过关系链接到每个部分下的小节部分(SubsectionEntity)。

我想做的是获取将涵盖的部分和相关小节作为选定的考试,并将它们存储在可以包含多个字符串值的字典中每个键。

我的代码是这样开始的:

var sectionsDictionary = [String:[String]]()

    //---Fetch Section Entity
    let sectionPredicate = NSPredicate(format: "(exam = %@)", selectedExam)

    let sectionsFetchRequest:NSFetchRequest = SectionEntity.MR_requestAllWithPredicate(sectionPredicate)

    let fetchedSections:NSArray = SectionEntity.MR_executeFetchRequest(sectionsFetchRequest)

一切都很好。但后来我尝试获取与所选部分相关的小节,但出现问题。

以下代码:

  for section in fetchedSections {
        let sectionName = section.valueForKey("name") as! String

        // //error occurs on the line below
        let subsectionPredicate = NSPredicate(format: "(section = %@)", section as! SectionEntity)

        let subsectionsFetchRequest:NSFetchRequest = SubsectionEntity.MR_requestAllWithPredicate(subsectionPredicate)


        let fetchedSubsections:NSArray = SubsectionEntity.MR_executeFetchRequest(subsectionsFetchRequest)

我得到的错误是:

Could not cast value of type 'NSManagedObject_SectionEntity_' (0x7fb363e18580) to 'MyApp.SectionEntity' (0x10c9213e0). 

接下来的几行应该遍历获取的结果,将它们的名称作为值添加到以部分名称作为键的字典中。

          for subsection in fetchedSubsections{
            let subsectionName = subsection.valueForKey("name") as! String
            sectionsDictionary[sectionName] = [subsectionName]
        }

    }

提前致谢。

您没有为记录定义 class 的类型

转到 Project.xcdatamodeld 文件,select 您的 SectionEntity

检查字段Class是否是这样的

如果是则在Class字段中写入"SectionEntity"并回车,应该是这样

然后重试

您需要确保您枚举的集合中的元素类型正确。

据推测,Magical Record 将 return NSArrayNSManagedObject 项。您需要确保 Swift 知道 section 是什么类型。

for object in fetchedSections {
   let section = object as! SectionEntity
   // ...
}    

此外,请参阅我的 answer 关于 NSManagedObject 子类的不成功转换。