uitableview - Sorting with NSFetchedResultsController -


using xcode 4.6, ios6, coredata, uitableviewcontroller, nsfetchesresultscontroller

i figured out how following dates in nsdate variables:

todaydate yesterdaydate thisweek lastweek thismonth lastmonth lastyear 

now use nsfetchedresultscontroller put data sections based on data in above variables. i'm assuming have date compare:

if ([date1 compare:date2] == nsordereddescending) { nslog(@"date1 later date2");         } else if ([date1 compare:date2] == nsorderedascending) {     nslog(@"date1 earlier date2"); } else {     nslog(@"dates same"); } 

there possibility users not have of sections. so, need put in following method determine number of sections based on fetchrequest:

- (nsinteger)numberofsectionsintableview:(uitableview *)tableview 

i need know how divide data cells numberofrowsinsection: , have displayed cells cellforrowatindexpath:

some code examples nice! thanks.

edit

i haven't integrated controller yet, below code fetch:

- (void) refreshtable {      nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init];     nsentitydescription *entity = [nsentitydescription entityforname:@"meeting" inmanagedobjectcontext:self.managedobjectcontext];     [fetchrequest setentity:entity];      nssortdescriptor *sortdescriptor = [[nssortdescriptor alloc] initwithkey:@"lastmoddate" ascending:no];     nsarray *sortdescriptors = [nsarray arraywithobjects:sortdescriptor, nil];      [fetchrequest setsortdescriptors:sortdescriptors];      [self.managedobjectcontext executefetchrequest:fetchrequest onsuccess:^(nsarray *results) {         [self.refreshcontrol endrefreshing];         self.objects = results;         [self.tableview reloaddata];      } onfailure:^(nserror *error) {          [self.refreshcontrol endrefreshing];         nslog(@"an error %@, %@", error, [error userinfo]);     }]; 

here how i'm getting dates:

   nscalendar *cal = [nscalendar currentcalendar];     nsdatecomponents *components = [cal components:( nshourcalendarunit | nsminutecalendarunit | nssecondcalendarunit ) fromdate:[[nsdate alloc] init]];      [components sethour:-[components hour]];     [components setminute:-[components minute]];     [components setsecond:-[components second]];     nsdate *today = [cal datebyaddingcomponents:components todate:[[nsdate alloc] init] options:0]; //this variable should pointing @ date object start of today (midnight);      [components sethour:-24];     [components setminute:0];     [components setsecond:0];     nsdate *yesterday = [cal datebyaddingcomponents:components todate: today options:0];      components = [cal components:nsweekdaycalendarunit | nsyearcalendarunit | nsmonthcalendarunit | nsdaycalendarunit fromdate:[[nsdate alloc] init]];      [components setday:([components day] - ([components weekday] - 1))];     nsdate *thisweek  = [cal datefromcomponents:components];      [components setday:([components day] - 7)];     nsdate *lastweek  = [cal datefromcomponents:components];      [components setday:([components day] - ([components day] -1))];     nsdate *thismonth = [cal datefromcomponents:components];      [components setmonth:([components month] - 1)];     nsdate *lastmonth = [cal datefromcomponents:components]; 

this do. create core data model , 'user' entity within model. assume u know how this, if u dont comment , ill explain. create custom class ur entity other entity , give lastmoddate nsdate attribute, plus add creationdate attribute equal exact date , time of creating entity can use identifier each userentity. have have array of separate arrays each section want create in uitableview. when add user entity model, set attributes, , because said users might not have every variable, set variable user entity doesn't need nil. when initialize arrays add user entities have appropriate attributes set value. finally, when implement -(nsinteger)numberofsectionsintableview:(uitableview *)tableview have count arrays.

here should like:

im going call entity represents each user 'userentity' (its nsmanagedobject s class have same name).

the following code goes in header of ever class going use create , fetch entities - same class using display uitableview.

@interface class : uitableviewcontroller {     nsmanagedobjectcontext *managedobjectcontext;     nsmutablearray *arrayofarrays; }  @property (retain, nonatomic) nsmanagedobjectcontext   *managedobjectcontext; @property (retain, nonatomic) nsmutablearray   *arrayofarrays; 

the following code goes in implementation of ever class going use create , fetch entities - same class using display uitableview.

//for adding userentity model (core data database) , setting attributes

- (userentity *)adduserentitytomodel {      userentity *myent = (userentity *)[nsentitydescription insertnewobjectforentityforname:@"userentity" inmanagedobjectcontext:self.managedobjectcontext];     myent.creationdate = [nsdate date];    myent. lastmoddate = ...; //replace '...' date    //add other values appropriate attributes here, attributes not //pertain userentity ignore - automatically set default when //are created.      nserror *error = nil;     if(!managedobjectcontext)          nslog(@"managedobejctcontext problem @ ...");     else if (![managedobjectcontext save:&error]) {         nslog(@"context not saved!");;     } else      nslog(@"context saved.");       } 

//for getting userentity's

- (nsmutablearray *)getfetcharray {          nsfetchrequest *request = [[nsfetchrequest alloc] init];         if(!managedobjectcontext) {             nslog(@"there no managedobjectcontext @ getfetcharray");         }            nsentitydescription *entity = [nsentitydescription entityforname:@"userentity" inmanagedobjectcontext:managedobjectcontext];          [request setentity:entity];          nssortdescriptor *sortdescriptor = [[nssortdescriptor alloc] initwithkey:@"creationdate" ascending:no];         nsarray *sortdescriptors = [[nsarray alloc] initwithobjects:sortdescriptor, nil];         [request setsortdescriptors:sortdescriptors];         [sortdescriptors release];         [sortdescriptor release];          nserror *error = nil;         nsmutablearray *mutablefetchresults = [[managedobjectcontext executefetchrequest:request error:&error] mutablecopy];         if (mutablefetchresults == nil) {             nslog(@"mutablefetchresults array nil");         }          [request release];          return mutablefetchresults;     } 

//setting arrayofarrays

-(void)createarrayofarrays {  nsmutablearray *fetcharray = [self getfetcharray];   nsmutablearray *todaydatearray = [[nsmutablearray alloc] init];   nsmutablearray *yesterdaydatearray = [[nsmutablearray alloc] init];   nsmutablearray *thisweekarray = [[nsmutablearray alloc] init];         //... create array each section want  (userentity *ue in fetcharray) {        if(ue.lastmoddate) { //if attribute not nil         if(ue.lastmoddate isequal todaydate)        [todaydatearray insertobject:ue atindex:0];      else if (ue.lastmoddate isequal yesterdaydate)        [yesterdaydatearray insertobject:ue atindex:0];         // ... every section array          }     }   arrayofarrays = [[nsmutablearray alloc] initwithobjects:todaydatearray,yesterdaydatearray,...(the rest of arrays created each attribute), nil]      [todaydatearray release];     [yesterdaydatearray release];   //  ... release arrays except arrayofarrays , fetcharray       } 

//setting managedobjectcontext

- (id)init {     self = [super init];      if (self) {     appdelegate *appdelegate = [[uiapplication sharedapplication] delegate];//what ever //the name of appdel is.         nsmanagedobjectcontext *context = [appdelegate managedobjectcontext];         self.managedobjectcontext = context;         [self createarrayofarrays];//this first creates arrayofarrays , set //equal that's saved in database. if add entity need update //it.     }      return self; }  - (nsinteger)numberofsectionsintableview:(uitableview *)tableview {     // return number of sections.     return arrayofarrays.count; }  - (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section {     // return number of rows in section.     return [[arrayofarrays objectatindex:section] count]; } 

//then displaying cells in table view

- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath     {         static nsstring *cellidentifier = @"cell";          uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:cellidentifier];         if (!cell) {             cell = [[[uitableviewcell alloc] initwithstyle:uitableviewcellstylesubtitle reuseidentifier:cellidentifier] autorelease];         }           userentity *ent = (userentity *)[[arrayofarrays objectatindex:indexpath.section] objectatindex:indexpath.row];         cell.accessorytype = uitableviewcellaccessorybasic;         if(ent.lastmoddate) { //if lastmoddate not nil         cell.textlabel.text = ent. lastmoddate;         } else {             nslog(@"lastmoddate nil @ tableview: cellforrowatindexpath");         }          nslog(@"tableview: cellforrowatindexpath called.");         return cell;     } 

Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -