ios - Search NSFetchedResults by changing Settings in another view -



ios - Search NSFetchedResults by changing Settings in another view -

i have read lot of content , watched several tutorials on how search core info using search bar have not yet seen how alter sort descriptor passing setting settings view table view.

i have search bar button item when pressed goes searchsettingsvc. views communicate passing boolean's 1 vc other , vise-versa. problem table not corresponding accordingly changing tablevc order - (i have tried calling self.tableview beginupdates, self.tableview reload, self fetchedresultscontroller among other things).

the point reorder tablevc results, not nowadays specific results predicate does

i have created delegate settingsvc can pass boolean value settingsvc capable of returning different changed value if there changes.

the problem cannot manage table view (or prehaps fetched results) update.

here code -(nsfetchedresultscontroller*) fetchedresultscontroller method:

// homecoming if initialized if (self.fetchedresultscontroller != nil) { homecoming self.fetchedresultscontroller; } if (datesearch == true){ nsmanagedobjectcontext *managedobjectcontext = [self managedobjectcontext]; // entity fetch nsentitydescription *entity = [nsentitydescription entityforname:@"details" inmanagedobjectcontext:managedobjectcontext]; // how sort info nssortdescriptor *sort = [nssortdescriptor sortdescriptorwithkey:@"adddate" ascending:yes]; nsfetchrequest *request = [[nsfetchrequest alloc] init]; [request setentity:entity]; [request setsortdescriptors:[nsarray arraywithobject:sort]]; self.fetchedresultscontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:request managedobjectcontext:managedobjectcontext sectionnamekeypath:nil cachename:nil]; // fetch info nserror *e = nil; if (![self.fetchedresultscontroller performfetch:&e]) { nslog(@"fetch error(date): %@", e ); abort(); } nslog(@"dates loaded"); } if (mostamount == true){ nsmanagedobjectcontext *managedobjectcontext = [self managedobjectcontext]; // entity fetch nsentitydescription *entity = [nsentitydescription entityforname:@"details" inmanagedobjectcontext:managedobjectcontext]; // how sort info nssortdescriptor *sort = [nssortdescriptor sortdescriptorwithkey:@"amount" ascending:no]; nsfetchrequest *request = [[nsfetchrequest alloc] init]; [request setentity:entity]; [request setsortdescriptors:[nsarray arraywithobject:sort]]; self.fetchedresultscontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:request managedobjectcontext:managedobjectcontext sectionnamekeypath:nil cachename:nil]; // fetch info nserror *e = nil; if (![self.fetchedresultscontroller performfetch:&e]) { nslog(@"fetch error (most fuel): %@", e); abort(); } nslog(@"amount loaded"); } else{ nsmanagedobjectcontext *managedobjectcontext = [self managedobjectcontext]; // entity fetch nsentitydescription *entity = [nsentitydescription entityforname:@"details" inmanagedobjectcontext:managedobjectcontext]; // how sort info nssortdescriptor *sort = [nssortdescriptor sortdescriptorwithkey:@"adddate" ascending:yes]; nsfetchrequest *request = [[nsfetchrequest alloc] init]; [request setentity:entity]; [request setsortdescriptors:[nsarray arraywithobject:sort]]; self.fetchedresultscontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:request managedobjectcontext:managedobjectcontext sectionnamekeypath:nil cachename:nil]; // fetch info nserror *e = nil; if (![self.fetchedresultscontroller performfetch:&e]) { nslog(@"fetch error(date): %@", e ); abort(); } nslog(@"defualt loaded"); } homecoming self.fetchedresultscontroller;

i required default because @ origin when initialise booleans in tablevc false can updated when go settings vc.

my searchsettingsvc has uiswitches alter values true false (and vice-versa) update equivalent booleans in tablevc represented when homecoming searchsettingsvc.

my prepareforsegue code in tablevc

if ([[segue identifier] isequaltostring:@"searchsettings"]){ //pass new search settings in here searchselectionsettings * settingsvc = (searchselectionsettings *)segue.destinationviewcontroller; settingsvc.delegate = self; settingsvc.datesearch = datesearch; settingsvc.mostamount = mostamount;

this closesettings method located in tablevc

#pragma mark - settingsviewcontrollerdelegate methods //record settings changed in settings view //dismissviewcontroller changes screen - (void)closesettings:(id)sender { nslog(@"working?"); datesearch = ((searchselectionsettings *)sender).datesearch; mostamount = ((searchselectionsettings *)sender).mostamount; [self dismissviewcontrolleranimated:yes completion:nil]; [self fetchedresultscontroller]; nsindexpath * indexpath; [self tableview:self.tableview cellforrowatindexpath:indexpath]; }

passing boolean values 1 vc other works perfectly. getting tableview update according fetchedresults if statements not, switches in settingsvc updated every time without issues. can help or recommend tutorial?

the opening lines of fetchedresultscontroller getter, i.e.:

// homecoming if initialized if (self.fetchedresultscontroller != nil) { homecoming self.fetchedresultscontroller; }

mean that, 1 time fetchedresultscontroller has been created, remaining code not executed when access it. quick way resolve problem hence set self.fetchedresultscontroller nil in closesettings method, , reload table view. when tableview reloads, access fetchedresultscontroller again, , since nil, above code bypassed , code used.

#pragma mark - settingsviewcontrollerdelegate methods //record settings changed in settings view //dismissviewcontroller changes screen - (void)closesettings:(id)sender { nslog(@"working?"); datesearch = ((searchselectionsettings *)sender).datesearch; mostamount = ((searchselectionsettings *)sender).mostamount; [self dismissviewcontrolleranimated:yes completion:nil]; self.fetchedresultscontroller = nil; [self.tableview reloaddata]; }

alternatively, can modify fetchedresultscontroller's fetch , reperform fetch:

#pragma mark - settingsviewcontrollerdelegate methods //record settings changed in settings view //dismissviewcontroller changes screen - (void)closesettings:(id)sender { nslog(@"working?"); datesearch = ((searchselectionsettings *)sender).datesearch; mostamount = ((searchselectionsettings *)sender).mostamount; [self dismissviewcontrolleranimated:yes completion:nil]; nsfetchrequest *request = [[nsfetchrequest fetchrequestwithentityname:@"details"]; nssortdescriptor *sort; if (datesearch == true){ sort = [nssortdescriptor sortdescriptorwithkey:@"adddate" ascending:yes]; nslog(@"dates loaded"); } else if (mostamount == true) { sort = [nssortdescriptor sortdescriptorwithkey:@"amount" ascending:no]; nslog(@"amount loaded"); } else { sort = [nssortdescriptor sortdescriptorwithkey:@"adddate" ascending:yes]; nslog(@"default loaded"); } [request setsortdescriptors:[nsarray arraywithobject:sort]]; self.fetchedresultscontroller.fetchrequest = request; // fetch info nserror *e = nil; if (![self.fetchedresultscontroller performfetch:&e]) { nslog(@"fetch error (most fuel): %@", e); abort(); } [self.tableview reloaddata]; }

that way, can simplify fetchedresultscontroller code loads default.

ios objective-c uitableview

Comments

Popular posts from this blog

assembly - What is the addressing mode for ld, add, and rjmp instructions? -

vowpalwabbit - Interpreting Vowpal Wabbit results: Why are some lines appended by "h"? -

Is there a way to convert an HTML page styled with Bootstrap CSS into email-compatible html? -