NSFetchtedResultsController をプロパティとして指定しました...
@property (nonatomic, strong) NSFetchedResultsController *controller;
...そしてデリゲートを私のクラスに設定します。
self.controller.delegate = self;
次に、見出しに記載されているメソッドを実装し、ブレークポイントを配置しました。
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
=> BREAKPOINT <=
}
次のように、コントローラーのフェッチ要求を作成しました。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Post"];
// ... some sort ...
self.controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.context
sectionNameKeyPath:nil
cacheName:@"cache"];
現在、同じコンテキストの別のクラスに「Post」タイプのいくつかの NSManagedObjects を格納していますが、didChangeObject
メソッドは呼び出されません(ブレークポイントがその中にあります)。
誰が何がうまくいかないのか知っていますか?
更新 #1: サーバーからいくつかの投稿を取得してコンテキストに格納するクラスは、GCD を使用して非同期で実行されます。
更新 #2: マルチスレッド環境でコンテキストを使用できないため、別の方法で試しました。(Thanks to svena) はServerConnection
(GCD を使用して) 非同期ブロックで実行され、メイン スレッドでセレクターを実行します。このセレクター メソッドは投稿をデータベースに保存し、テーブルビューを更新する必要があります。基本的に、このコンテキストに何かを保存すると、didChangeObject
メソッドが自動的に呼び出されるべきだと思いましたか? しかし、そうではありません。:-/
現在のステータスを説明するために、短いシーケンス図を追加しました。 これが機能しない理由を誰かが知っていますか? しばらくお待ちください。CoreData と Objective-C は初めてです。:)