ios - Problems with uitableview sections using JSON -
i creating app demo purposes , have uitableview being populated json data , works fine. want create sections in table based on sessiondate app crashes error below:
terminating app due uncaught exception 'nsinvalidargumentexception', reason: '-[sessions objectforkey:]: unrecognized selector sent instance 0xac2b460'
here code parsing json:
-(void) retrievedata { nsurl * url = [nsurl fileurlwithpath:[[nsbundle mainbundle]pathforresource:@"sessions-json.json" oftype:nil]]; nsdata * data = [nsdata datawithcontentsofurl:url]; json = [nsjsonserialization jsonobjectwithdata:data options:kniloptions error:nil]; //set our speakers array sessionsarray = [[nsmutablearray alloc] init]; (int = 0; < json.count; i++) { //create sessions object nsstring * sid = [[json objectatindex:i] objectforkey:@"id"]; nsstring * sstatus = [[json objectatindex:i] objectforkey:@"sessionstatus"]; nsstring * sday = [[json objectatindex:i] objectforkey:@"sessionday"]; nsstring * sdate = [[json objectatindex:i] objectforkey:@"sessiondate"]; nsstring * stime = [[json objectatindex:i] objectforkey:@"sessiontime"]; nsstring * sname = [[json objectatindex:i] objectforkey:@"sessionname"]; nsstring * sspeaker1 = [[json objectatindex:i] objectforkey:@"sessionspeaker1"]; nsstring * sspeaker1company = [[json objectatindex:i] objectforkey:@"speaker1company"]; nsstring * sspeaker2 = [[json objectatindex:i] objectforkey:@"sessionspeaker2"]; nsstring * sspeaker2company = [[json objectatindex:i] objectforkey:@"speaker2company"]; nsstring * sspeaker3 = [[json objectatindex:i] objectforkey:@"sessionspeaker3"]; nsstring * sspeaker3company = [[json objectatindex:i] objectforkey:@"speaker3company"]; nsstring * sspeaker4 = [[json objectatindex:i] objectforkey:@"sessionspeaker4"]; nsstring * sspeaker4company = [[json objectatindex:i] objectforkey:@"speaker4company"]; nsstring * sspeaker5 = [[json objectatindex:i] objectforkey:@"sessionspeaker5"]; nsstring * sspeaker5company = [[json objectatindex:i] objectforkey:@"speaker5company"]; nsstring * sspeaker6 = [[json objectatindex:i] objectforkey:@"sessionspeaker6"]; nsstring * sspeaker6company = [[json objectatindex:i] objectforkey:@"speaker6company"]; nsstring * sdesc = [[json objectatindex:i] objectforkey:@"sessiondesc"]; nsstring * sitscecs = [[json objectatindex:i] objectforkey:@"itscecs"]; nsstring * ssessionid = [[json objectatindex:i] objectforkey:@"sessionid"]; sessions * mysessions = [[sessions alloc] initwithid:sid andsessionstatus:sstatus andsessionday:sday andsessiondate:sdate andsessiontime:stime andsessionname:sname andsessionspeaker1:sspeaker1 andspeaker1company:sspeaker1company andsessionspeaker2:sspeaker2 andspeaker2company:sspeaker2company andsessionspeaker3:sspeaker3 andspeaker3company:sspeaker3company andsessionspeaker4:sspeaker4 andspeaker4company:sspeaker4company andsessionspeaker5:sspeaker5 andspeaker5company:sspeaker5company andsessionspeaker6:sspeaker6 andspeaker6company:sspeaker6company andsessiondesc:sdesc anditscecs:sitscecs andsessionid:ssessionid]; //add our sessions object our sessionsarray [sessionsarray addobject:mysessions]; nssortdescriptor *sort = [nssortdescriptor sortdescriptorwithkey:@"sessiondate" ascending:yes]; [sessionsarray sortusingdescriptors:[nsarray arraywithobject:sort]]; } [self.mytableview reloaddata]; }
here's code in numberofsectionsintableview:
- (nsinteger)numberofsectionsintableview:(uitableview *)tableview { //#warning potentially incomplete method implementation. // return number of sections. //return 1; if (tableview == self.mytableview) { return self.sessionsarray.count; } else { [self searchthroughdata]; return self.results.count; } }
here's code in numberofrowsinsection:
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section { // return number of rows in section. //return sessionsarray.count; if (tableview == self.mytableview) { return self.sessionsarray.count; } else { [self searchthroughdata]; return self.results.count; } }
here's code in titleforheaderinsection:
- (nsstring *)tableview:(uitableview *)tableview titleforheaderinsection:(nsinteger)section { return [[sessionsarray objectatindex:section] objectforkey:@"sessiondate"]; }
i've been working objective c couple months, i'm overlooking basic. help.
sessionsarray
contains sessions
objects, when use you're treating contains dictionaries. use same code section count , row count. so, looks intend have 2 sets / levels of data have 1 , you're trying use 2 things.
you need decide sessionsarray
used , keep that. sections represent , how represent rows in each section. configure data structure match that.
Comments
Post a Comment