ios - NSFetchedResultsControllerDelegate's methods not being called in UISearchController's searchResultsController -
i'm trying migrate uisearchdisplaycontroller uisearchcontroller, i'm having hard time getting nsfetchedresultscontrollerdelegate's methods called in uisearchcontroller's searchresultscontroller. uisearchcontroller instantiated as:
self.searchcontroller = [[uisearchcontroller alloc] initwithsearchresultscontroller:self.searchresultsviewcontroller]; self.searchcontroller.searchresultsupdater = self.searchresultsviewcontroller; self.searchcontroller.searchbar.frame = cgrectmake(0.0, 0.0, 320.0, 44.0); /* radr://17315477 */ self.tableview.tableheaderview = self.searchcontroller.searchbar; self.definespresentationcontext = yes; the searchresultscontroller boilerplate uitableviewcontroller (self.searchresultsviewcontroller above). uitableviewdatasource methods copied on old uisearchdisplaycontroller. things like:
- (nsinteger)numberofsectionsintableview:(uitableview *)tableview { homecoming (self.searchfetchedresultscontroller.sections.count); } the uitableviewcontroller both uisearchresultsupdating , nsfetchedresultscontrollerdelegate. delegate methods (that aren't getting called) boilerplate docs. updatesearchresultsforsearchcontroller: pretty basic well:
- (void)updatesearchresultsforsearchcontroller:(uisearchcontroller *)searchcontroller { if (!searchcontroller.isactive) return; self.searchfetchedresultscontroller.delegate = self; self.searchfetchedresultscontroller.fetchrequest.predicate = [nspredicate predicatewithformat:@"%k contains[cd] %@", @"name", searchcontroller.searchbar.text]; nserror *error = nil; if (![self.searchfetchedresultscontroller performfetch:&error]) nslog(@"unresolved error %@, %@", error, [error userinfo]); nslog(@"%@", @([self.searchfetchedresultscontroller.fetchedobjects count])); } i set delegate every time right because problem delegate methods not called after performfetch. i'm not sure else at. i've confirmed in debugger delegate set both before , after , set right object. searchfetchedresultscontroller lazy instantiation has not changed, , there no cache delete. when printing fetchedobjets count, count update , correct. if throw [self.tableview reloaddata] after performfetch, looks ought, know that's not idea. nsfetchedresultscontrollerdelegate's methods aren't getting called. else seeing similar behavior or need maintain digging in codebase? things for?
the appropriate thing here is phone call uitableview's reloaddata or add/delete changed rows after changing fetchrequest.predicate. knew nsfetchedresultscontrollerdelegates triggered on alter in managed object not on alter in predicate.
so why sure doing wrong? because worked before, when used uisearchdisplaycontroller, , utilize uisearchcontroller, didn't work. failed recall was returning yes shouldreloadtableforsearchstring: which, of course, calls reloaddata. worked before, not because of nsfetchedresultscontrollerdelegate.
ios objective-c core-data nsfetchedresultscontrolle
No comments:
Post a Comment