我无法根据与谓词的关系从核心数据中获取实体
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 NSArray
个 NSManagedObject
项。您需要确保 Swift 知道 section
是什么类型。
for object in fetchedSections {
let section = object as! SectionEntity
// ...
}
此外,请参阅我的 answer 关于 NSManagedObject
子类的不成功转换。
快速背景知识:我有一个 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 NSArray
个 NSManagedObject
项。您需要确保 Swift 知道 section
是什么类型。
for object in fetchedSections {
let section = object as! SectionEntity
// ...
}
此外,请参阅我的 answer 关于 NSManagedObject
子类的不成功转换。