quattro_4 scribble

scribble 落書き (調べた事をただ落書きする)

MotionInMotion Episode 16 - NSFetchedResultsController

NSFetchedResultsController - MotionInMotion

単純なTaskモデルのCRUD

  • NSFetchedResultsControllerを使ってCoreDataに保存
    • easy to maintain
    • table views will be faster
    • memory usage will go down
  • TaskListController
    • viewDidLoad
      • error_ptr = Pointer.new(:object)
      • fetch_controller.delegate = self
      • unless fetch_controller.performFetch(error_ptr)
        • raise "Error performing fetch: #{error_ptr[2].description}"
      • NSNotificationCenter.defaultCenter.addObserver
        • selector:'context_did_save:',
        • name: NSManagedObjectContextDidSaveNotification
    • private def fetch_controller
      • @fetch_controller ||= NSFetchedResultsController.alloc.initWithFetchRequest(
        • @tasks.fetch_request
  • Notification Handlers
    • context_did_save
      • Dispatch::Queue.main.async do
        • fetch_controller.managedObjectContext.mergeChangesFromContextDidSaveNotification(notification)
  • NSFetchedResultsControllerDelegate
    • controllerWillChangeContent(controller)
      • view.beginUpdates
    • controller didChangeObject atIndexPath forChangeType newIndexPath
      • case change_type
        • NSFetchedResultsChangeInsert / NSFetchedResultsChangeDelete / NSFetchedResultsChangeUpdate
      • view.insert/delete/relaodRowsAtIndexPaths withRowAnimation: UITableViewRowAnimationAutomatic
  • UITableViewDelegate
    • editingStyleForRowAtIndexPath
    • canEditRowAtIndexPath
    • commitEditingStyle commitEditingStyle
    • didSelectRowAtIndexPath