SWIFT核心数据关系一对多对自己的实体
嗨我建立具有项目关系到自身报纸数据库(项目可以有很多其他项目如儿童)SWIFT核心数据关系一对多对自己的实体
这里是我的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
这个关系的定义对于自己来说是一对多的反转。任何帮助非常感谢。谢谢。
首先更新你的类管理对象类,而不是使用的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?
}
其次集创建一个名为fetchRequest与getItemByID表达 ID == $ ID
三创建一个功能,以获得项目编号
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
}
之后,你有很多选择来设置关系
一)创建添加父&孩子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()
}
嗨,感谢您的帮助。我现在可以添加关系。棘手的部分是使用Set
这不是一个错误,但它比使用NSSet&获取可变副本并将其保存回来更容易。 –
是我设置一个与反一对多的关系为项目
试试这个自动创建的关系和属性。
Generating Swift models from Core Data entities
即 编辑:我找到了解决方案,以从核心数据实体雨燕车型:
在Xcode
:
编辑>创建NSManagedOjbect>单击 “下一步” 按钮>点击按钮 “下一页”>选择“Swift”Langage>点击按钮“创建”
以下是关于如何从头创建关系的链接。这是一个很好的解释和真棒教程。经历这一点,你将能够理解所有的事情。 http://code.tutsplus.com/tutorials/core-data-from-scratch-relationships-and-more-fetching--cms-21505
反向您好我已经创建使用它。但如何添加项目到检查item.kids.add(kid)或类似的东西 –
更新我的答案。 – Harsh
嗨,感谢您的帮助。我知道如何建立关系。但我的问题是添加项目关系到自己的实体。我上传了我的coredata的图片并生成了NSmanage对象。但不能添加项目给孩子(NSSet属性) –
你加在XCDataModel关系后关系? – Harsh
是的,我设置一对多关系与项目 –