2016-05-12 68 views
0

我有一個類別的實體和一個子類別的實體。它是一對多的,因爲一個類別可以有很多子類別。我仍然在試圖總結我的周圍這一切頭如此忍受我...作爲NSSet核心數據中的關係

extension Category { 
    @NSManaged var name: String? 
    @NSManaged var subCategory: SubCategory? 
} 


extension SubCategory { 
    @NSManaged var name: String? 
} 

,然後在其他地方的代碼,如一些視圖控制器我撥打這個電話

let category = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.context) as! Category 
let sub = SubCategory() 
sub.name = "sub1" 

category.subCategory = sub 

//save it 

而且那麼當我看到實際的核心數據Sqlite db時,我可以看到Category實體的ZSUBCATEGORY列填充了子類別實體的主鍵值。我已經在數據模型中定義了關係。

我的問題是,我注意到一些關係存儲與NSSet。這樣做有什麼好處嗎?我做錯了什麼和令人震驚?對我來說這似乎只是簡單,因爲我可以再做...

category.subcategory.name 

得到子類別名稱

+1

一個* to-many *關係被表示爲一個(可選的)'NSSet',那麼如何將多個子類別關聯到一個類別呢?如果你讓Xcode創建託管對象的子類,那麼你應該自動獲得一個'NSSet?'屬性。你是否自己編寫擴展而不是讓Xcode這樣做? - 如果某個類別有10個子類別,那麼「獲取子類別名稱」是什麼意思? –

回答

0

如果是一對一的關係,你的確可以這樣做:

category.subcategory.name 

這就是你在這個例子中所做的,你已經定義了一對一的關係。如果你想一對多比你定義它:

extension Category { 
    @NSManaged var name: String? 
    @NSManaged var subCategory: NSSet? 
} 

這樣的類別與子類別的數量掛鉤,所以如果你會做

category.subcategory.name 

你怎麼知道哪些子類別你正在訪問?你將不得不遍歷整個集合,找到你想找到的一個子類別。