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

Posted

技术标签:

【中文标题】我无法根据与谓词的关系从核心数据中获取实体【英文标题】:I'm having trouble fetching entities from core data based on relationships with predicates 【发布时间】:2015-08-12 20:45:16 【问题描述】:

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

我要做的是获取所选考试将涵盖的部分和相关子部分,并将它们存储在字典中,该字典可以为每个键保存多个字符串值。 p>

我的代码是这样开始的:

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]
        

    

提前致谢。

【问题讨论】:

您是否将核心数据模型编辑器中SectionEntitiy 的类设置为SectionEntity?还是还是默认的NSManagedObject 【参考方案1】:

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

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

检查字段Class是否是这样的

如果是然后在Class字段中写“SectionEntity”并回车,应该是这样的

然后再试一次

【讨论】:

【参考方案2】:

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

据推测,Magical Record 将返回 NSArrayNSManagedObject 个项目。你需要确保 Swift 知道 section 是什么类型。

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

另外,请参阅我的 answer,了解对 NSManagedObject 子类的不成功强制转换。

【讨论】:

以上是关于我无法根据与谓词的关系从核心数据中获取实体的主要内容,如果未能解决你的问题,请参考以下文章

核心数据获取请求关系属性谓词

子查询谓词核心数据

具有核心数据关系的 iOS 8 Swift NSFetchResult 谓词无法访问内部 ID

核心数据获取谓词“不包含”?

核心数据获取请求中需要谓词?

核心数据:从相关实体中获取