ios - AFIncrementalStore context vs MagicalRecord MR_contextForCurrentThread -


i trying use afincrementalstore magicalrecord.

i have class beer few properties (from brewerydb web service). fetch beers using [beer mr_fetchallwithdelegate:self] returns nsfetchedresultscontroller instance, (which grab , assign beerfetchcontroller) , performs actual fetch using controller. can see set view controller delegate of the method, in turns, sets view controller delegate of beerfetchcontroller. far good. have table view displays beers, , implement method

- (void)controllerdidchangecontent:(nsfetchedresultscontroller *)controller {     [self.beerstable reloaddata]; } 

so whenever afincrementalstore gets data, puts context, controller notified , in turn method should called, , table refreshed. problem is, delegate method not called @ all! after investigation able draw conclusions.

+ (nsfetchedresultscontroller *) mr_fetchallwithdelegate:(id<nsfetchedresultscontrollerdelegate>)delegate; {     return [self mr_fetchallwithdelegate:delegate incontext:[nsmanagedobjectcontext mr_contextforcurrentthread]]; }   + (nsfetchedresultscontroller *) mr_fetchallwithdelegate:(id<nsfetchedresultscontrollerdelegate>)delegate incontext:(nsmanagedobjectcontext *)context; {     nsfetchrequest *request = [self mr_requestallincontext:context];     nsfetchedresultscontroller *controller = [self mr_fetchcontroller:request delegate:delegate usefilecache:no groupedby:nil incontext:context];      [self mr_performfetch:controller];     return controller; } 

the issue that, [nsmanagedobjectcontext mr_contextforcurrentthread], return child context who's parent backing context afincrementalstore uses internally. afincrementalstore saves parent, not child, therefore controller has no idea changed, , delegate method not called. able modify method :

+ (nsfetchedresultscontroller *) mr_fetchallwithdelegate:(id<nsfetchedresultscontrollerdelegate>)delegate incontext:(nsmanagedobjectcontext *)context; {     nsfetchrequest *request = [self mr_requestallincontext:context];     nsfetchedresultscontroller *controller = [self mr_fetchcontroller:request delegate:delegate usefilecache:no groupedby:nil incontext:context.parentcontext];      [self mr_performfetch:controller];     return controller; } 

instead of binding controller context returned mr_contextfromcurrentthread, bind parent. , then, expected stuff works should, context changed, controller sees that, , delegate method called. question is, there way to, push changes parent context child context not have change method implementation ?

+ (nsmanagedobjectcontext *) mr_contextforcurrentthread; {     if ([nsthread ismainthread])     {         return [self mr_defaultcontext];     }     else     {         nsmutabledictionary *threaddict = [[nsthread currentthread] threaddictionary];         nsmanagedobjectcontext *threadcontext = [threaddict objectforkey:kmagicalrecordmanagedobjectcontextkey];         if (threadcontext == nil)         {             threadcontext = [self mr_contextwithparent:[nsmanagedobjectcontext mr_defaultcontext]];             [threaddict setobject:threadcontext forkey:kmagicalrecordmanagedobjectcontextkey];         }         return threadcontext;     } } 


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -