2011-07-02 98 views
3

有人在乎推測NSFetchedResultsController的內部工作嗎?NSFetchedResultsController:它如何知道哪些對象調用它的委託?

具體來說:它是如何知道哪些對象調用其委託方法的?如果我要實現NSFRC,我會這樣做:1)註冊來自託管上下文的所有通知,以及2)當我收到通知時,檢查對象的類型與實體的類型在NSFRC中獲取請求,並檢查NSFRC中的謂詞(如果存在)是否爲該對象返回true,如果兩者都爲true,則調用委託的... didChangeObject ...方法。

似乎笨重,但以某種方式,特別是與類型檢查(使用isKindOf?)。只是問,因爲我需要在NSFRC方面執行類似的事情。

+0

+1令人敬畏的問題,也想知道,但沒有時間去研究它(現在轉移到Mac)。 –

回答

1

託管對象上下文廣播一系列通知,通知的用戶信息字典包含插入,刪除或更新的託管對象。

E.g.

NSManagedObjectContextObjectsDidChangeNotification

當包含在一個管理對象 上下文 對象的屬性的值被改變發佈。通知 期間 processPendingChanges公佈,該 變化已被處理之後,但 之前,它是安全地調用保存:再次 (如果你嘗試,你會產生 無限循環)。

通知對象是託管的 對象上下文。 userInfo 字典中包含以下密鑰:鍵:NSInsertedObjectsKey, NSUpdatedObjectsKey和 NSDeletedObjectsKey。

FRC然後只是檢查它自己的實體上返回的對象的實體,如果它匹配發送它的委託消息。

+0

是的,正如我寫的:所以'只檢查實體'位將涉及類型檢查對象(它可以只是object.entity == thefetchrequest.entity的指針比較),然後檢查謂詞,如果存在,則匹配對象。對?感謝您的確認。 – Colin

+0

它沒有對類型進行檢查,因爲很大一部分時間,它將是一個通用的NSManagedObject實例,該實例已被配置爲對特定實體進行建模。你可能有幾十個實體都是由同一個NSManagedObject類建模的。相反,它會檢查返回NSEntityDescription對象的NSManagedObject.entity值。但否則,是的,我相信。 – TechZen

相關問題