2011-07-11 5 views
0

NSFetchedResultsControllerDelegateを使用して、「イベント」を出力するテーブルビューの変更を検出しています。しかし、「イベント」は「isFollowed」番号(Assiciation.isFollow == 1の場合はイベントを印刷し、それ以外の場合は表示されません)を含む「関連」にリンクされます。これらのisFollow BOOLは変更できますが、NSFetchedResultsControllerDelegateは "Association"ではなく "Events"の変更を検出します。だから私はこのコードを使用しています特定のコアデータテーブルの変更を検出する

- (void) viewWillAppear:(BOOL)animated{ 
    //[self setMyFetchedResultsController:nil]; 
    NSError *error = nil; 
    [myFetchedResultsController performFetch:&error]; 
    [[self myTableView] reloadData]; 
} 

テーブルを毎回リロードします。問題は、効率的ではないということです。コントローラが有用なときだけでなく、コントローラが更新されるたびに更新されるからです。そこで、コアデータの特定のテーブル内の特定の行の変更を検出するソリューションがあるかどうか、あるいはより良い方法を考えているかどうかを知りたかったのです。

おかげで、ニールス・

答えて

0

あなたは通知を(NSManagedObjectDidSaveNotificationのドキュメントを参照してください)保存監視し、いずれかの団体が変更されたかどうかを確認するために彼らの結果によってクロール可能性があります。このアプローチは、本質的に非効率的である。

しかし、より良いアプローチでは、ビューコントローラからのアソシエーションを変更するデリゲートコールバックがあり、その後にテーブルのセル/フェッチ結果コントローラの更新を強制することになります。

この例では、イベントの後続または未処理の関連付けを表す個々の表セルを単純に更新することが適切だと思います。一括更新の場合でも、テーブル全体を単にリロードするのが最善です。

+0

特定の時刻にmanagedObjectのハッシュコードを取得する方法はありますか?たとえば、コードは3です。次に、変更を加えて保存します。コードは4です。コードが異なる場合にのみ更新します。まず、hasChangeの使用について考えましたが、それはコミットされていない変更のためのものです。ここではコミットされた変更を行っています。 –

+0

保存通知のNSUpdatedObjects部分に十分なプレゼンスがないのはなぜですか? – ImHuntingWabbits

関連する問題