を使用すると、これは非常に簡単ですNSFetchedResultsController
。このクラスをと組み合わせて使用すると、UITableView
メモリオーバーヘッドを削減し、応答時間を改善できます。
ドキュメントは、NSFetchedResultsControllerクラスリファレンスおよびNSFetchedResultsControllerDelegateプロトコルリファレンスにあります。
さらに、のデリゲートメソッドを実装できますNSFetchedResultsController
。デリゲートメソッドを実装NSFetchedResultsController
すると、データ(登録したデータ)、つまりテーブルでの追加、削除、移動、更新などの操作をリッスンできますNSManagedObjectContext
。
このテーマに関する非常に優れたチュートリアルは、core-data-tutorial-how-to-use-nsfetchedresultscontrollerです。UITableView
ここでは、、、NSFetchedResultsController
およびそのデリゲートを設定するためのすべての要素を見つけることができます。
つまり、あなたの質問については、この手法を使用して、(特定の)プロパティが変更されたUITableViewCell
ときのコンテンツを変更できます。特に、特定の変更に対応するには、次のデリゲートメソッドを実装する必要があります(コメントを参照)。isAvailable
NSManagedObject
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate: // <---- here you will change the content of the cell based on isAvailable property
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
それが役に立てば幸い。