我根据与谓词的关系从核心数据中获取实体时遇到问题

时间:2015-08-12 20:45:16

标签: ios swift core-data magicalrecord

快速背景:我有一个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]
        }

    }

提前感谢。

2 个答案:

答案 0 :(得分:1)

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

转到 Project.xcdatamodeld 文件,然后选择SectionEntity

检查字段Class是否像这样

enter image description here

如果是,那么写入Class字段" SectionEntity"然后按Enter键,它应该是这样的

enter image description here

然后再试一次

答案 1 :(得分:0)

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

据推测,魔法记录将返回NSArrayNSManagedObject个项目。您需要确保Swift知道section是什么类型。

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

另外,请参阅我的answer,了解NSManagedObject子类的失败转化。

相关问题