我无法根据与谓词的关系从核心数据中获取实体
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 将返回 NSArray
的 NSManagedObject
个项目。你需要确保 Swift 知道 section
是什么类型。
for object in fetchedSections
let section = object as! SectionEntity
// ...
另外,请参阅我的 answer,了解对 NSManagedObject
子类的不成功强制转换。
【讨论】:
以上是关于我无法根据与谓词的关系从核心数据中获取实体的主要内容,如果未能解决你的问题,请参考以下文章