ios - Updating Core Data Model using two separate View Controllers -
i had app setup store 1 line items in single entity within core data model. have since decided change allow main uitableview list name of each item , when tap on item can edit item name , add additional sub items within uitextview.
i have 2 vcs.
- viewcontroller
- edititem
i have 2 entities.
item -- > itemname
list -- > listname
item
has relationship list
* list - list - items
list
has relationship item
* items - item - list
what little confused around how go fetching data being stored in new entity. if list
child of item
, fetching item
automagically fetch objects list
?
right able input item on main vc , save it. if tap on item taken secondary vc allows edit item.
when fetching item
in main vc, should fetching objects list
, pass them within prepareforsegue
method?
the idea here that:
- if item name exists , left alone or edited, should written model
- if there no todolist, user should add items list, , tapping
save
should updateitem
,todo list
@ time.
current nsfetchedresultscontroller on viewcontroller
-(nsfetchedresultscontroller *) fetchedresultscontroller { if (_fetchedresultscontroller != nil) { return _fetchedresultscontroller; } nsfetchrequest *fetchrequest = [[nsfetchrequest alloc]init]; nsmanagedobjectcontext *context = [self managedobjectcontext]; nsentitydescription *entity = [nsentitydescription entityforname:@"item" inmanagedobjectcontext:context]; [fetchrequest setentity:entity]; nssortdescriptor *sortdescriptor = [[nssortdescriptor alloc] initwithkey:@"itemname" ascending:yes]; nsarray *sortdescriptors = [[nsarray alloc]initwithobjects:sortdescriptor, nil]; fetchrequest.sortdescriptors = sortdescriptors; _fetchedresultscontroller = [[nsfetchedresultscontroller alloc]initwithfetchrequest:fetchrequest managedobjectcontext:context sectionnamekeypath:nil cachename:nil]; _fetchedresultscontroller.delegate = self; return _fetchedresultscontroller; }
current save ibaction on edititem
- (ibaction)save:(id)sender { nsmanagedobjectcontext *context = [self managedobjectcontext]; if (self.edititemfield) { // update existing device self.todoitem.itemname = self.edititemfield.text; } nserror *error = nil; // save object persistent store if (![context save:&error]) { nslog(@"can't save! %@ %@", error, [error localizeddescription]); } [self.navigationcontroller popviewcontrolleranimated:yes]; }
edit
as can see screenshot, idea top textfield populated list title previous vc. works should. user can edit title or leave is. can add items list using second textfield.
when submit list item on edit item
vc, new object saved model not displayed in uitableview. way think should work, think edit item vc should setup pretty viewcontroller vc setup. shouldnt have fetch handled when setup context, etc. being there relationship between item
entity , list
entity, of information gets fetched together. correct in assumption?
when save item model on edit item
vc, there association automatically made between list item , parent item name?
any push in right direction on appreciated.
edit
i added:
nserror *error = nil; if (![[self fetchedresultscontroller] performfetch:&error]) { nslog(@"error: %@", error); abort(); }
into viewdidload method. caused data populate in uitableview on edititem vc however, no matter item tap on in main vc, same list.
example:
- i create
item 1
- i tap on
item 1
, create 2 items in edititem vc - i go initial vc
- i create
item 2
- i tape on
item 2
- the same list
item 1
displayeditem 2
i resolved this.
here done.
first off there serious cleanup of files, arrangement, etc. there objects, attributes, etc., didnt make sense. renaming things helped lot causing lot of confusion.
there one-to-one relationship between list , item entities. updated make one-to-many relationship. 1 list , have many items. using predicate grab data needed model key fixing issue.
nspredicate *predicate = [nspredicate predicatewithformat:@"list == %@", self.todolist]; [fetchrequest setpredicate:predicate];
now things work way should. main vc holds many list names. second vc shows items pertaining specific list.
Comments
Post a Comment