我有在CoreData中存儲樹結構的應用程序。 有一個ManagedObject, 「項目」,它具有屬性:基於另一個對象屬性填充CoreData ManagedObject屬性
- 的itemId(串)
- 列表項
- 標題(字符串)
- 的parentId(串)
- 父(關係項)
- parentTitle(串)
的parentId點另一個Item對象。
我如何讓屬性parentTitle自動填充父項的標題?
我有在CoreData中存儲樹結構的應用程序。 有一個ManagedObject, 「項目」,它具有屬性:基於另一個對象屬性填充CoreData ManagedObject屬性
的parentId點另一個Item對象。
我如何讓屬性parentTitle自動填充父項的標題?
雖然Martin的建議是派生值的一個很好的解決方案,但我對你的問題是,你爲什麼要這麼做?你永遠不會操縱父母的價值。因爲你只是訪問它,直接通過KVC訪問父如:
Item *item = ...;
NSString *title = [item valueForKeyPath:@"parent.title"];
//Do something with title
你想使用keyPathsForValues...
功能的唯一情況是,如果你正在改變基於該值的東西。如果您只是訪問它,請直接使用KVC。
這是爲了實現期望的功能的可能性:
// implement in Item.m
// manages KVO notifications
+ (NSSet *)keyPathsForValuesAffectingParentTitle
{
return [NSSet setWithObjects:@"parent.title", nil];
}
// getter for parentTitle
- (NSString*) parentTitle
{
return [self valueForKeyPath:@"parent.title"];
}
另外聲明屬性parentTitle在Item.h 爲只讀無需聲明一個核心數據的屬性「parentTitle」。
我用這個解決方案中看到的唯一的問題是:
由於使用keyPathsForValuesAffecting聲明的依賴關係,視圖獲取通知,但對象A已經發生故障(並且在關閉時不能再次無效)d oes核心數據自動處理這樣的故障&觀察問題?
感謝您的解決方案! 擁有這樣的parentTitle屬性是不好的做法嗎?不應該鼓勵通過parent.title始終訪問該值嗎? – Rod 2010-07-04 11:07:15
我認爲馬庫斯給出了一個很好的解釋何時使用哪種解決方案。 – 2010-07-05 06:37:03