将子实体附加到核心数据 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 的类。我还继承了VisitEntityLogEntity,都继承自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中的行中的标签

使用 Swift 和 Core Data 的多对多附加数据

swift ios如何检查核心数据库中的字段

iOS:Swift:核心数据:错误:+entityForName:nil 不是搜索实体名称的合法 NSManagedObjectContext 参数

iOS (Swift):使用关系获取核心数据