ios - NSFetchedResultController EXC_BAD_ACCESS code 2 -



ios - NSFetchedResultController EXC_BAD_ACCESS code 2 -

i working on chat application using xmpp framework on ios, working roster storage giving framework itself, error when run application, log in account, , crashes, tried debug can't find explanation. here code:

@interface friendlisttableviewcontroller ()<nsfetchedresultscontrollerdelegate> @property (nonatomic,strong) nsfetchedresultscontroller *fetchedresultcontroller; @end @implementation friendlisttableviewcontroller -(appdelegate *)appdelegate { homecoming (appdelegate *)[[uiapplication sharedapplication]delegate]; } #pragma mark - fetchedresult controller delegate -(nsfetchedresultscontroller *)fetchedresultcontroller { if (self.fetchedresultcontroller == nil) { //here exc_bad_access code=2 nsmanagedobjectcontext *moc = [[self appdelegate] managedobjectcontext_roster]; nsentitydescription *entity = [nsentitydescription entityforname:@"xmppusercoradatastorageobject" inmanagedobjectcontext:moc]; nssortdescriptor *sortdes1 = [[nssortdescriptor alloc] initwithkey:@"sectionnum" ascending:yes]; nssortdescriptor *sortdes2 = [[nssortdescriptor alloc] initwithkey:@"displayname" ascending:yes]; nsarray *sortdescriptors = [nsarray arraywithobjects:sortdes1,sortdes2, nil]; nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; [fetchrequest setentity:entity]; [fetchrequest setsortdescriptors:sortdescriptors]; [fetchrequest setfetchbatchsize:10]; self.fetchedresultcontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:fetchrequest managedobjectcontext:moc sectionnamekeypath:@"sectionnum" cachename:nil]; [self.fetchedresultcontroller setdelegate:self]; nserror *error = nil; if (![self.fetchedresultcontroller performfetch:&error]) { } } homecoming self.fetchedresultcontroller; }

hope can help me.

you're writing getter method, fetchedresultcontroller (although name fetchedresultscontroller, match class name. , within getter method you're calling self.fetchedresultcontroller (reinvoking getter within itself) , later self.fetchedresultcontroller = ..., invoking setter within getter.

within setter/getter methods place should using backing ivar directly.

a improve idiom: in .h:

@property (nonatomic, strong) nsfetchedresultscontroller *fetchedresultscontroller

and in .m

-(nsfetchedresultscontroller *)fetchedresultscontroller { if (_!fetchedresultscontroller) { nsmanagedobjectcontext *moc = self.managedobjectcontext_roster; nsentitydescription *entity = [nsentitydescription entityforname:@"xmppusercoradatastorageobject" inmanagedobjectcontext:moc]; nssortdescriptor *sortdes1 = [[nssortdescriptor alloc] initwithkey:@"sectionnum" ascending:yes]; nssortdescriptor *sortdes2 = [[nssortdescriptor alloc] initwithkey:@"displayname" ascending:yes]; nsarray *sortdescriptors = @[sortdes1, sortdes2]; nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; [fetchrequest setentity:entity]; [fetchrequest setsortdescriptors:sortdescriptors]; [fetchrequest setfetchbatchsize:10]; _fetchedresultscontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:fetchrequest managedobjectcontext:moc sectionnamekeypath:@"sectionnum" cachename:nil]; _fetchedresultscontroller.delegate = self; nserror *error = nil; if (![_fetchedresultscontroller performfetch:&error]) { nsassert(no, @"fetchedresultscontroller fetch failed"); } } homecoming _fetchedresultscontroller; }

a couple of other notes: modernized array initialization syntax. suggest maintain moc reference local, instead of reaching app delegate find it. mixed utilize of dot , bracket notation makes code harder read; consider fetchrequest.entity = entity, etc. , finally, using hardcoded string keypaths (sectionnum, xmppusercoredatastorageobject, etc) within code asking hard-to-find bug. define them 1 time extern strings.

ios core-data

Comments

Popular posts from this blog

model view controller - MVC Rails Planning -

ruby on rails - Devise Logout Error in RoR -

html - Submenu setup with jquery and effect 'fold' -