2010-07-19 57 views
1

我想弄清楚如果KVC機制提供任何形式的幫助時處理關係屬性是相反的關係屬性。我將使用人爲和標準的部門/員工示例。可可鍵值編碼和反比關係屬性

@interface Department : NSObject { 
     NSMutableArray *employees; 
} 
@property (retain) NSMutableArray *employees; 
// KVC methods for mutating the employees array 

@end 


@interface Employee : NSObject { 
    Department *department; 
} 
@property (retain) Department *department; 

有了這個(以及省略的KVC收集方法)KVC提供了什麼樣的幫助來管理雙向關係?我現在只處於概念階段。我知道核心數據我可以設置明確的逆關係,因此當我使用[myDepartment insertObject:newEmployee inEmployeesAtIndex:lastIndex];時,然後newEmployee.department自動設置爲myDepartment,但是我可以單獨使用KVC和運行時實現此目標,還是需要核心數據?

在此先感謝您的幫助。

編輯有點無關,但也很重要,在我的代碼,我把員工的財產係爲retain但我不知道這是否會導致保留週期?

回答

1

Key-Value Coding中沒有任何東西可以幫助您保持反向關係。但是,您可以利用Key-Value 觀察

你會想要做的主要事情是:

  • 實現自己的等價類NSManagedObject,而不僅僅是繼承NSObject的直接對你的實體類,因爲畢竟你不能保證任意NSObject子類將與你提出的系統一起工作。 (或者,您可以將它們在協議中需要的所有東西編碼,EOF通過EOEnterpriseObject協議完成此操作。)
  • 實現您自己的類,等同於NSManagedObjectContext來處理實體類實例的觀察,以便它可以告訴它們執行在適當的時候進行逆向維護。請注意,由KVO觸發的反向維護不需要重新觸發KVO,這將觸發反向維護等。
  • 實現與NSManagedObjectModel等價的自己的類層次結構,以便與NSManagedObjectContext的等價物知道實體類的實例的哪些屬性可以具有反向關係,以及它們是什麼。

考慮到所有這一切,您可能只是想使用核心數據,因爲它已經完成了所有這些工作,並在過去幾年中進行了廣泛的調整,以做得很好。

+0

啊哈,我開始意識到這是唯一的方法。你是對的,爲了這個努力,我會比Core Data更好。然而,由於我的需求非常小(非常小的對象圖),我想我可以通過「手工」來做事。感謝您的徹底解答! – jbrennan 2010-07-19 16:51:24