ios - One-to-Many Relationship: CoreData -


i'm new coredata , have been stuck on issue. assistance appreciated.

information: have core data app entities; list , task. list , task have one-to-many relationship.

task.h

@class list;  @interface task : nsmanagedobject  @property (nonatomic, retain) nsstring * task; @property (nonatomic, retain) nsstring * note; @property (nonatomic, retain) list *list;  @end 

list.h

@class task;  @interface list : nsmanagedobject  @property (nonatomic, retain) nsstring * name; @property (nonatomic, retain) nsdate * datecreated; @property (nonatomic, retain) nsnumber * sortorder; @property (nonatomic, retain) nsset *task; @end  @interface list (coredatageneratedaccessors)  - (void)addtaskobject:(task *)value; - (void)removetaskobject:(task *)value; - (void)addtask:(nsset *)values; - (void)removetask:(nsset *)values;  @end 

i create lists using;

 nsmanagedobjectcontext *context = [self managedobjectcontext];  if ([self.listtextfield.text length] == 0) { // quit here if no text entered     [self dismissviewcontrolleranimated:yes completion:nil];     return; }  // create new list. // create nsmanagedobject our database entity. list = [nsentitydescription insertnewobjectforentityforname:@"list" inmanagedobjectcontext:context]; // add new task object (which in turns adds our database). [list setvalue:self.listtextfield.text forkey:@"name"];  // current date , time. nsdate *todaydate = [nsdate date]; // add date object (which in turns adds our database). [list setvalue:todaydate forkey:@"datecreated"];   nserror *error = nil; // save object persistent store if (![context save:&error]) {     nslog(@"can't save! %@ %@", error, [error localizeddescription]); } [self dismissviewcontrolleranimated:yes completion:nil]; 

i can update created lists using code below cellaccessorybuttontapped;

nsmanagedobjectcontext *context = [self managedobjectcontext];  if ([self.listtextfield.text length] == 0) {     // delete object database.     [context deleteobject:self.list];     nserror *error = nil;     // save action persistent store     if (![context save:&error]) {         nslog(@"can't save! %@ %@", error, [error localizeddescription]);     }     [self dismissviewcontrolleranimated:yes completion:nil]; } else {     // update existing task.     [self.list setvalue:self.listtextfield.text forkey:@"name"];     // current date , time.     nsdate *todaydate = [nsdate date];     // add date object (which in turns adds our database).     [list setvalue:todaydate forkey:@"datecreated"];     nserror *error = nil;     // save action persistent store     if (![context save:&error]) {         nslog(@"can't save! %@ %@", error, [error localizeddescription]);     } } [self dismissviewcontrolleranimated:yes completion:nil]; 

i can navigate list.

my question how can create task list have navigated into? it's been 2 days , i've not been able find on google.


as advised have added;

@property (strong, nonatomic) list *selectedlist; 

i have save method

nsmanagedobjectcontext *context = [self managedobjectcontext];

// saving new task. task *task = [nsentitydescription insertnewobjectforentityforname:@"task" inmanagedobjectcontext:context];  task.task = self.tasktext.text; task.note = self.notetext.text; task.list = self.selectedlist; nslog(@"the selected list is: %@", [self.selectedlist description]);  nserror *error = nil; // save object persistent store if (![context save:&error]) {     nslog(@"can't save! %@ %@", error, [error localizeddescription]); } [self.selectedlist addtaskobject:task]; [self dismissviewcontrolleranimated:yes completion:nil]; 

the new task created created in lists. possible working , i'm not fetching tasks based on list?

this fetch request when navigate list:

if (fetchedresultscontroller != nil) {     return fetchedresultscontroller; }  // create fetch request. nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; // create entity fetch data from. nsentitydescription *entity = [nsentitydescription entityforname:@"task" inmanagedobjectcontext:self.managedobjectcontext]; // set entity of fetch request. [fetchrequest setentity:entity]; // set amount fetched @ time [fetchrequest setfetchbatchsize:20]; // create sort descriptor. nssortdescriptor *sortdescriptor = [[nssortdescriptor alloc] initwithkey:@"task" ascending:no]; // attach sort descriptor fetch request. nsarray *sortdescriptors = [[nsarray alloc] initwithobjects:sortdescriptor, nil]; [fetchrequest setsortdescriptors:sortdescriptors];  // create fetch result controller using fetch request nsfetchedresultscontroller *thefetchedresultscontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:fetchrequest                                                                                               managedobjectcontext:self.managedobjectcontext                                                                                                 sectionnamekeypath:nil                                                                                                          cachename:nil]; self.fetchedresultscontroller = thefetchedresultscontroller; thefetchedresultscontroller.delegate = self;  // perform fetch. nserror *error = nil; if (![self.fetchedresultscontroller performfetch:&error]) {     // handle error.     nslog(@"unresolved error %@, %@", error, [error userinfo]);     exit(-1);  // fail } return fetchedresultscontroller; 

you need keep track of list have navigated into. 1 way of doing create property called parentlist

@property(nonatomic,strong) list *parentlist 

in view controller create task in. , before navigating view controller set property.

in task view controller insert similar list object using task *reqdtask = [nsentitydescription insertnewobjectforentityforname:@"task" inmanagedobjectcontext:context]; , set values once save button pressed.

[parentlist addtaskobject: reqdtask]; 

and ur done. create task in task entity , map list entity. hope helps.

**edit***

you need [parentlist addtaskobject: reqdtask]; before saving context.

add in nsfectresultscontroller
[fetchrequest setpredicate:[nspredicate predicatewithformat:@"list = %@",self.parentlist]];

so this

// create fetch request. nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; // create entity fetch data from. nsentitydescription *entity = [nsentitydescription entityforname:@"task" inmanagedobjectcontext:self.managedobjectcontext]; // set entity of fetch request. [fetchrequest setentity:entity]; // set amount fetched @ time [fetchrequest setfetchbatchsize:20]; // create predicate. [fetchrequest setpredicate:[nspredicate predicatewithformat:@"list = %@",self.parentlist]]; //continue 

this bring task associated selected list.


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -