2016-08-11 181 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屬性) –