iphone - problem with NSSortDescriptor .i am sorting the in ascending order(alphabetical order) -
i using nssortdescriptor
sort custom objects key bandname
, not getting output in alphabetical order. how fix that?
-(void)getdetails { nslog(@"in getdetail method"); songrequestappdelegate *appdelegate = [[uiapplication sharedapplication] delegate]; nsmanagedobjectcontext *context1 = [appdelegate managedobjectcontext]; nsentitydescription *entitydesc = [nsentitydescription entityforname:@"addtofav" inmanagedobjectcontext:context1]; nsfetchrequest *request = [[nsfetchrequest alloc] init]; [request setentity:entitydesc]; nserror *error; nsmutablearray *array_new=[[nsmutablearray alloc]init]; [array_new addobjectsfromarray:[context1 executefetchrequest:request error:&error]]; //[self.fetchedobjects addobjectsfromarray:[context1 executefetchrequest:request error:&error]]; [request release]; **nssortdescriptor *sortdescriptor; sortdescriptor = [[[nssortdescriptor alloc] initwithkey:@"bandname" ascending:yes] autorelease]; nsmutablearray *sortdescriptors = [nsmutablearray arraywithobject:sortdescriptor]; //self.fetchedobjects= [array_new sortedarrayusingdescriptors:sortdescriptors]; [self.fetchedobjects addobjectsfromarray:array_new]; [array_new release];** (int i=0; i<[self.fetchedobjects count];i++) { nsmanagedobject *addfav=[self.fetchedobjects objectatindex:i]; addfavobject *addfavobject=[[addfavobject alloc]init]; addfavobject.bandimagepath=[addfav valueforkey:@"bandimagepath"]; addfavobject.bandid=[addfav valueforkey:@"bandid"]; addfavobject.bandname=[addfav valueforkey:@"bandname"]; addfavobject.songid=[addfav valueforkey:@"songid"]; addfavobject.songlistid=[addfav valueforkey:@"songlistid"]; addfavobject.songname=[addfav valueforkey:@"songname"]; addfavobject.bandrealname=[addfav valueforkey:@"bandrealname"]; addfavobject.biography=[addfav valueforkey:@"biography"]; nslog(@"addto fav object biography %@",addfavobject.biography); [self.addtofavobjectarray addobject:addfavobject]; [addfavobject release]; } //nsarray *reverse = [[self.addtofavobjectarray reverseobjectenumerator] allobjects]; // [self.addtofavobjectarray removeallobjects]; // [self.addtofavobjectarray addobjectsfromarray:reverse]; nslog(@"self.addtofavobjectarray %@",self.addtofavobjectarray); nslog(@"fetched objects count %d",[self.fetchedobjects count]); }
sortedarrayusingdescriptors: doesn't sort in place array sent to. returns new array objects sorted. should work with:
nsarray *sortedarray = [array_new sortedarrayusingdescriptors:sortdescriptors]; [self.fetchedobjects addobjectsfromarray:sortedarray];
you don't need sort separately though. can give sort descriptors fetch request , array returned executing sorted. i'd highly recommend doing way instead of how you're doing it. can replace before loop with:
songrequestappdelegate *appdelegate = [[uiapplication sharedapplication] delegate]; nsmanagedobjectcontext *context1 = [appdelegate managedobjectcontext]; nsentitydescription *entitydesc = [nsentitydescription entityforname:@"addtofav" inmanagedobjectcontext:context1]; nssortdescriptor *sortdescriptor = [[[nssortdescriptor alloc] initwithkey:@"bandname" ascending:yes] autorelease]; nsmutablearray *sortdescriptors = [nsmutablearray arraywithobject:sortdescriptor]; [sortdescriptor release]; nsfetchrequest *request = [[nsfetchrequest alloc] init]; [request setentity:entitydesc]; [request setsortdescriptors:sortdescriptors]; nserror *error; nsmutablearray *array_new = [context1 executefetchrequest:request error:&error]; if (!array_new) { nslog(@"error: %@", error); } [self.fetchedobjects addobjectsfromarray:array_new]; [request release];
i added in check array_new print error. might want add additional error handling there too.
Comments
Post a Comment