CoreData でデータをフェッチするときは NSFetchedResultsController を使いたいけど、 CoreDataQuery には NSFetchedResultsController を取得するメソッドが無い。
その代わり NSFetchRequest は取得できるから、 CDQQuery っていう CoreDataQuery 内部で使われているクラス拡張して、 NSFetchedResultsController を取得するメソッドを追加している。
module CDQ class CDQQuery def fetchedResultsController NSFetchedResultsController.alloc.initWithFetchRequest( self.fetch_request, managedObjectContext: self.context, sectionNameKeyPath: nil, cacheName: nil ) end def fetch(params={}) ctrl = self.fetchedResultsController ctrl.delegate = params[:delegate] error_ptr = Pointer.new(:object) unless ctrl.performFetch(error_ptr) NSLog(error_ptr[0].localizedDescription) end ctrl end end end
使い方はこんな感じ
Entry.sort_by(:createdAt).fetch(delegate: self)
そうえいば、MotionDataWrapper でも同じことやったな。