快速背景:我有一个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]
}
}
提前感谢。
答案 0 :(得分:1)
您没有为您的记录定义类的类型
转到 Project.xcdatamodeld 文件,然后选择SectionEntity
检查字段Class是否像这样
如果是,那么写入Class字段" SectionEntity"然后按Enter键,它应该是这样的
然后再试一次
答案 1 :(得分:0)
您需要确保列举的集合元素的类型正确。
据推测,魔法记录将返回NSArray
个NSManagedObject
个项目。您需要确保Swift知道section
是什么类型。
for object in fetchedSections {
let section = object as! SectionEntity
// ...
}
另外,请参阅我的answer,了解NSManagedObject
子类的失败转化。