将子实体附加到核心数据 iOS Swift 中的实体
Posted
技术标签:
【中文标题】将子实体附加到核心数据 iOS Swift 中的实体【英文标题】:Append Child Entity to Entity in Core Data iOS Swift 【发布时间】:2015-11-04 17:07:09 【问题描述】:我有这个核心数据模型:(DashboardEntity 是 Visit 和 Log 的父级)
现在,我将DashboardEntity
子类化为一个继承自NSManagedObject
的类。我还继承了VisitEntity
和LogEntity
,都继承自DashboardEntity
。
我想将一个条目附加到DashboardEntity
,但我希望这个条目是VisitEntity
,这应该是可能的,因为它继承自DashboardEntity
,如下所示:
// Fething dashboard entity
var dashboard = [DashboardEntity]()
let fetchRequest = NSFetchRequest(entityName: "DashboardEntity")
// Returning results as an array of DashboardEntities
do
let results = try managedContext.executeFetchRequest(fetchRequest)
dashboard = results as! [DashboardEntity]
catch let error as NSError
print("Could not fetch \(error), \(error.userInfo)")
// Point to DashboardEntity from my database
let entity = NSEntityDescription.entityForName("DashboardEntity", inManagedObjectContext:managedContext)
// Here I create an object of type VisitEntity, that takes an extra parameter that converts json to properties
let person: VisitEntity = VisitEntity (entity: entity!, insertIntoManagedObjectContext: managedContext, jsonData: index)
// I append this new object to
do
try managedContext.save()
dashboard.append(person)
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
但是发生了错误:
"Unrecognized selector sent to instance", setManager 是选择器 (来自 VisitEntity,因为它在 DashboardEntity 上不可用)。
如果我有一个 X 对象的普通数组,并且我想添加一个从它继承的对象,我可以在 Swift 中做到这一点,为什么它不适用于 Core Data NSManagedObjects?
如果我添加一个 DashboardEntity 对象,一切正常。
这样做的原因是我有一个UITableViewController
,它可以同时包含访问和日志,这取决于单元格表是否有一些选项。
谢谢大家!
【问题讨论】:
该代码不调用setManager
。什么代码导致了错误?
【参考方案1】:
在我看来,这里的两行:
// Point to DashboardEntity from my database
let entity = NSEntityDescription.entityForName("DashboardEntity", inManagedObjectContext:managedContext)
// Here I create an object of type VisitEntity, that takes an extra parameter that converts json to properties
let person: VisitEntity = VisitEntity (entity: entity!, insertIntoManagedObjectContext: managedContext, jsonData: index)
创建一个 VisitEntity 人实例,为其提供一个实体参数,其中 NSEntityDescription 是“DashboardEntity”而不是“VisitEntity”
因此,当试图设置 manager 属性时,应用程序说 DashboardEntity 没有成员“manager”。
也许尝试将实体描述设置为 VisitEntity:
// Point to DashboardEntity from my database
let entity = NSEntityDescription.entityForName("VisitEntity", inManagedObjectContext:managedContext)
// Here I create an object of type VisitEntity, that takes an extra parameter that converts json to properties
let person: VisitEntity = VisitEntity (entity: entity!, insertIntoManagedObjectContext: managedContext, jsonData: index)
【讨论】:
是的,就是这样!谢谢!在此之后出现另一个错误并使用其他答案修复它:***.com/a/26176070/2280527以上是关于将子实体附加到核心数据 iOS Swift 中的实体的主要内容,如果未能解决你的问题,请参考以下文章
使用核心数据swift ios将实体的所有属性获取到tableview中的行中的标签
使用核心数据swift ios获取实体的所有属性到tableview中的行中的标签
iOS:Swift:核心数据:错误:+entityForName:nil 不是搜索实体名称的合法 NSManagedObjectContext 参数