Saturday 15 January 2011

ios - Core data fetching object only once (for the same context) -



ios - Core data fetching object only once (for the same context) -

i have qrcode scan feature in app, , every time scan, must save scan record belongs event (another entity). fetch event , set attribute of scan.

the problem is: first scan saved have event relation set, next scans end without event.

here's current architecture: viewcontroller -> service -> persistence service -> nsmanagedobject

all classes in persistence service layer kid of next class:

# persistenceservice.h #import <foundation/foundation.h> @interface persistenceservice : nsobject @property (nonatomic, retain) nsmanagedobjectcontext *context; -(instancetype) init; -(void) savecontext; @end # persistenceservice.m @implementation persistenceservice -(instancetype) init { self = [super init]; if (self) { self.context = [[nsmanagedobjectcontext alloc] initwithconcurrencytype:nsprivatequeueconcurrencytype]; self.context.parentcontext = [datamanager sharedinstance].managedobjectcontext; } homecoming self; } -(void) savecontext { nsmanagedobjectcontext *context = self.context.parentcontext; [self.context performblock:^{ nserror *error; [self.context save:&error]; [context performblock:^{ nserror *error; [context save:&error]; [context.parentcontext performblock:^{ nserror *error; [context.parentcontext save:&error]; }]; }]; }]; } @end

so how save scan:

# pseudoleadpersistenceservice.m -(void) saveorupdatepseudolead:(lead *)lead oftype:(pseudoleadtype)type { pseudoleaddao *pseudoleaddao = [pseudoleaddao findpseudoleadbycode:lead.qrcode.code andeventid:lead.event.idevent incontext:self.context]; if (pseudoleaddao == nil) { pseudoleaddao = [[pseudoleaddao alloc] initwithlead:lead andtype:type andcontext:self.context]; } else { [pseudoleaddao setattributeswithlead:lead]; } [self savecontext]; }

and here set event in pseudoleaddao (i hate class name):

# pseudoleaddao.m -(void) setattributeswithlead:(lead *)lead { [self setpseudoleadid:lead.id]; [self sethotlead:lead.hotlead]; [self setpseudoleaddescription:lead.description]; [self setevent:[eventdao findeventbyid:lead.event.idevent incontext:self.managedobjectcontext]]; if (lead.qrcode.code != nil) { [self setqrcode:lead.qrcode.code]; } }

looks fetch works 1 time per context or that. i'm lost :(

ios objective-c core-data nsmanagedobjectcontext

No comments:

Post a Comment