2016-08-11 166 views
0

嗨我建立具有项目关系到自身报纸数据库(项目可以有很多其他项目如儿童)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 这个关系的定义对于自己来说是一对多的反转。任何帮助非常感谢。谢谢。

我coredata xcmod​​el enter image description here

enter image description here

enter image description here

+1

你加在XCDataModel关系后关系? – Harsh

+0

是的,我设置一对多关系与项目 –

回答

1

首先更新你的类管理对象类,而不是使用的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() 
    } 
+0

嗨,感谢您的帮助。我现在可以添加关系。棘手的部分是使用Set 而不是默认的NSSet。这是一个错误?在ObjectiveC中,我可以使用Xcode生成NSManageSubclass工作查找,但在Swift中与自己的实体的关系似乎不能自动工作 –

+0

这不是一个错误,但它比使用NSSet&获取可变副本并将其保存回来更容易。 –

0

是我设置一个与反一对多的关系为项目

0

试试这个自动创建的关系和属性。

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

+0

反向您好我已经创建使用它。但如何添加项目到检查item.kids.add(kid)或类似的东西 –

+0

更新我的答案。 – Harsh

+0

嗨,感谢您的帮助。我知道如何建立关系。但我的问题是添加项目关系到自己的实体。我上传了我的coredata的图片并生成了NSmanage对象。但不能添加项目给孩子(NSSet属性) –