iOS

[iOS SDK] fetchedResultsController をアプリ起動後にリセットする方法

例えば、CoreData で表示しているデータに対して、アプリ起動後に、フィルタをかけて、それを反映したい場合があります。

参考:[iOS SDK][CoreData] 表示するデータの並び順・セクション名・フィルタを設定する方法

その際には、データを表示しているテーブルビューを reloadData するだけでは反映ないので、一度、fetchedResultsController をリセット(再起動)すると反映されます。

fetchedResultsController をリセットする方法

アプリ内で表示するデータにフィルタをかけた際に、以下の処理を呼び出して、fetchedResultsController をリセットすると表示するデータに反映されます。

self.fetchedResultsController.delegate = nil;
self.fetchedResultsController = nil;
    
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

[self.tableView reloadData];

delegate と Controller を nil にすれば OK みたいです。