2011-07-02 1 views
3

NSFetchedResultsControllerの内部動作を推測する人は誰ですか?NSFetchedResultsController:デリゲートを呼び出すオブジェクトをどのように知っていますか?

具体的には、どのオブジェクトがデリゲートメソッドを呼び出すかをどのように知っていますか? NSFRCを実装する場合は、1)管理されたコンテキストからのすべての通知を登録し、2)通知を受け取ると、そのオブジェクトのタイプをオブジェクトのタイプと照合します。 NSFRCの要求をフェッチし、NSFRCの述語(存在する場合)がそのオブジェクトに対して真を返すかどうかをチェックし、両方が真であれば、delegateの... didChangeObject ...メソッドを呼び出します。

どういうわけか、とくにそのタイプチェック(使用はKindOf?)で不思議そうです。 NSFRCに関しても同様のことを実装する必要があるため、尋ねるだけです。

+0

+1素晴らしい質問もありましたが、それを調べる時間はありませんでした(今のところMacに移行しました)。 –

答えて

1

管理対象オブジェクトコンテキストは一連の通知をブロードキャストし、通知のユーザー情報辞書には、挿入、削除、または更新された管理対象オブジェクトが含まれます。

など。

NSManagedObjectContextObjectsDidChangeNotification

管理対象オブジェクト コンテキストに含まれる オブジェクトのプロパティの値が変更されたときに投稿されました。通知 は 変更が処理された後、 processPendingChanges中に掲載されているが、saveを呼び出すしても安全である 前:再び は(あなたがしようとした場合、あなたは 無限ループを生成します)。

通知オブジェクトは、管理された オブジェクトコンテキストです。 userInfo 辞書には、NSInsertedObjectsKey、 NSUpdatedObjectsKey、および NSDeletedObjectsKeyの キーが含まれています。

FRCは、返されたオブジェクトのエンティティを自身のエンティティ全体でチェックし、一致した場合にそのデリゲートメッセージを送信します。

+0

ええ、私が書いたように: '単にエンティティをチェックする'ビットはオブジェクトの型チェック(object.entity == thefetchrequest.entityの単なるポインタ比較でもかまいません)を含むでしょうし、存在する場合はオブジェクトに一致します。右?確認していただきありがとうございます。 – Colin

+0

オブジェクトの型チェックは行われません。なぜなら、特定のエンティティをモデル化するように構成された一般的なNSManagedObjectインスタンスであるためです。同じNSManagedObjectクラスでモデル化された数十ものエンティティを持つことができます。代わりに、NSEntityDescriptionオブジェクトを返すNSManagedObject.entity値をチェックします。しかしそうでなければ、はい、私はそう信じています。 – TechZen

関連する問題