swift 自身实体的一对多核心数据关系
swift core data relationship one to many for own entity
你好我正在建立一个报纸数据库,它与自身有项目关系(项目可以有许多其他项目作为子项目)
这是我的 NSmanageObjectSubclass
import Foundation
import CoreData
extension Item {
@NSManaged var by: String?
@NSManaged var dead: NSNumber?
@NSManaged var descendants: NSNumber?
@NSManaged var id: NSNumber?
@NSManaged var isdeleted: NSNumber?
@NSManaged var score: NSNumber?
@NSManaged var text: String?
@NSManaged var time: NSDate?
@NSManaged var title: String?
@NSManaged var type: String?
@NSManaged var url: String?
@NSManaged var kids: NSSet?
@NSManaged var parent: Item?
@NSManaged var parts: NSSet?
}
问题是如何将 item
添加到 属性 kids: NSSet
关系定义是一对多的,反向的。非常感谢任何帮助。谢谢。
我的核心数据 xcmodel
试试这个自动创建关系和属性。
Generating Swift models from Core Data entities
即
编辑:我找到了从核心数据实体生成 Swift 模型的解决方案:
在 Xcode
上:
Editor > Create NSManagedOjbect > Click button "Next" > Click button
"Next" > Select "Swift" Langage > Click button "Create"
这里是关于如何从头开始建立关系的 link。这是一个解释得很好且很棒的教程。通过这个,你将能够理解所有的事情。
http://code.tutsplus.com/tutorials/core-data-from-scratch-relationships-and-more-fetching--cms-21505
首先 更新您的 class 托管对象 class 以使用 Sets 而不是 NSSet
import Foundation
import CoreData
extension Item {
@NSManaged var by: String?
@NSManaged var dead: NSNumber?
@NSManaged var descendants: NSNumber?
@NSManaged var id: NSNumber?
@NSManaged var isdeleted: NSNumber?
@NSManaged var score: NSNumber?
@NSManaged var text: String?
@NSManaged var time: NSDate?
@NSManaged var title: String?
@NSManaged var type: String?
@NSManaged var url: String?
@NSManaged var kids: Set<Item>
@NSManaged var parent: Item?
@NSManaged var parts: NSSet?
}
其次 创建一个名为 getItemByID 的 fetchRequest 表达式
id == $ID
第三步创建一个通过id获取item的函数
func getItemById(ID:String) -> Item?
{
let fetchRequest : NSFetchRequest = self.managedObjectModel.fetchRequestFromTemplateWithName("getItemByID", substitutionVariables: ["ID": ID])!
do {
let fetchedResult = try managedObjectContext!.executeFetchRequest(fetchRequest) as! [Item]
if fetchedResult.count > 0 {
let result = fetchedResult[0]
return result
}
}
catch {
print("Could not fetch \(error)")
}
return nil
}
之后你有很多设置关系的选项
a) 将父子添加到 coreData 后创建关系
func addChildToParent(childID:String,parentID:String)
{
if let childItem = getItemById(childID)
{
if let parentItem = getItemById(parentID)
{
parentItem.kids.insert(menuItemCatering)
childItem.parent = parentItem
}
}
saveContext()
}
你好我正在建立一个报纸数据库,它与自身有项目关系(项目可以有许多其他项目作为子项目)
这是我的 NSmanageObjectSubclass
import Foundation
import CoreData
extension Item {
@NSManaged var by: String?
@NSManaged var dead: NSNumber?
@NSManaged var descendants: NSNumber?
@NSManaged var id: NSNumber?
@NSManaged var isdeleted: NSNumber?
@NSManaged var score: NSNumber?
@NSManaged var text: String?
@NSManaged var time: NSDate?
@NSManaged var title: String?
@NSManaged var type: String?
@NSManaged var url: String?
@NSManaged var kids: NSSet?
@NSManaged var parent: Item?
@NSManaged var parts: NSSet?
}
问题是如何将 item
添加到 属性 kids: NSSet
关系定义是一对多的,反向的。非常感谢任何帮助。谢谢。
我的核心数据 xcmodel
试试这个自动创建关系和属性。
Generating Swift models from Core Data entities
即 编辑:我找到了从核心数据实体生成 Swift 模型的解决方案:
在 Xcode
上:
Editor > Create NSManagedOjbect > Click button "Next" > Click button "Next" > Select "Swift" Langage > Click button "Create"
这里是关于如何从头开始建立关系的 link。这是一个解释得很好且很棒的教程。通过这个,你将能够理解所有的事情。 http://code.tutsplus.com/tutorials/core-data-from-scratch-relationships-and-more-fetching--cms-21505
首先 更新您的 class 托管对象 class 以使用 Sets 而不是 NSSet
import Foundation
import CoreData
extension Item {
@NSManaged var by: String?
@NSManaged var dead: NSNumber?
@NSManaged var descendants: NSNumber?
@NSManaged var id: NSNumber?
@NSManaged var isdeleted: NSNumber?
@NSManaged var score: NSNumber?
@NSManaged var text: String?
@NSManaged var time: NSDate?
@NSManaged var title: String?
@NSManaged var type: String?
@NSManaged var url: String?
@NSManaged var kids: Set<Item>
@NSManaged var parent: Item?
@NSManaged var parts: NSSet?
}
其次 创建一个名为 getItemByID 的 fetchRequest 表达式 id == $ID
第三步创建一个通过id获取item的函数
func getItemById(ID:String) -> Item?
{
let fetchRequest : NSFetchRequest = self.managedObjectModel.fetchRequestFromTemplateWithName("getItemByID", substitutionVariables: ["ID": ID])!
do {
let fetchedResult = try managedObjectContext!.executeFetchRequest(fetchRequest) as! [Item]
if fetchedResult.count > 0 {
let result = fetchedResult[0]
return result
}
}
catch {
print("Could not fetch \(error)")
}
return nil
}
之后你有很多设置关系的选项
a) 将父子添加到 coreData 后创建关系
func addChildToParent(childID:String,parentID:String)
{
if let childItem = getItemById(childID)
{
if let parentItem = getItemById(parentID)
{
parentItem.kids.insert(menuItemCatering)
childItem.parent = parentItem
}
}
saveContext()
}