uitableview - Swift Core data fetch results by day and sort into a tableview with time sections -


hi trying load table particular day data save core data. want data loaded each save being section. there many different measurements save core data. not getting far. can help?

var totalentries: int = 0 var isperformingsegue = false var totaldates: int = 0 var results: nsarray! = nsarray() var appdel: appdelegate! var context: nsmanagedobjectcontext! var request : nsfetchrequest!  override func viewdidload() {     super.viewdidload()     appdel = (uiapplication.sharedapplication().delegate as! appdelegate)    context = appdel.managedobjectcontext    loadtable() }  func loadtable() {   let today = nsdate()    // current calendar   let calendar = nscalendar.currentcalendar()   // start of day of selected date   let startdate = calendar.startofdayfordate(today)   // start of day after selected date   let enddate = calendar.datebyaddingunit(.day, value: 1, todate: startdate, options: nscalendaroptions())!     request.returnsobjectsasfaults = false  let dateformatter = nsdateformatter()  dateformatter.dateformat = "yyyy-mm-dd hh:mm"  dateformatter.timezone = nstimezone(name: "gmt") // line resolved me issue of getting 1 day less selected date   totalentries = context.countforfetchrequest(request, error: nil) int!   request.predicate = nspredicate(format: "(date >= %@) , (date <= %@)", startdate, enddate)  request.sortdescriptors = [nssortdescriptor(key: "report_id", ascending: false)]   {     var results : nsarray = try context.executefetchrequest(request)     } catch {     // report error got.      } }  // mark: - table view data source  override func tableview(tableview: uitableview, numberofrowsinsection section: int) -> int {   return results.count }    override func tableview(tableview: uitableview, cellforrowatindexpath indexpath: nsindexpath) -> uitableviewcell{  let cell: resulttableviewcell = tableview.dequeuereusablecellwithidentifier("resultcell") as! resulttableviewcell    //get contents , put cell   let ourdata = results[indexpath.row] as! nsmanagedobject    if indexpath.row == 0 {      let colourlevel: int = ((ourdata.valueforkey("colourlevel"))?.integervalue)!     cell.resultlabel.textcolor = uicolor.whitecolor()     cell.resultlabel.text = "colour of bowel movement"     cell.backgroundcolor  = globalcolourconstants.colourcolourarray[(colourlevel - 1)]     return cell   } else if indexpath.row == 1 {      let bmlevel: int = ((ourdata.valueforkey("bmlevel"))?.integervalue)!     cell.resultlabel.text = globalphrazesconstants.globalphrazesstrings.bmphrazearray[bmlevel]     cell.resultlabel.textcolor = uicolor.whitecolor()     let imagename = globaluiimageconstants.bmimagearray[bmlevel]     let image = uiimage(named: imagename)     cell.resulticonimageview.image = image     cell.backgroundcolor = globalcolourconstants.bmcolourarray[bmlevel]      return cell   } else {      return cell  } } 

i have undated method below , have got closer. can sort days data , sort in sections time. can't more 1 row show (there should more 1 row).

let managedobjectcontext = (uiapplication.sharedapplication().delegate as! appdelegate).managedobjectcontext  var fetchedresultcontroller: nsfetchedresultscontroller = nsfetchedresultscontroller()  override func viewdidload() {     super.viewdidload()    // core data   fetchedresultcontroller = getfetchedresultcontroller()   fetchedresultcontroller.delegate = self   {     try fetchedresultcontroller.performfetch()   } catch _ {   } }    // mark:- retrieve tasks  func getfetchedresultcontroller() -> nsfetchedresultscontroller {   fetchedresultcontroller = nsfetchedresultscontroller(fetchrequest: taskfetchrequest(), managedobjectcontext: managedobjectcontext, sectionnamekeypath: "savedtimehourminute", cachename: nil)   return fetchedresultcontroller }  func taskfetchrequest() -> nsfetchrequest {   let fetchrequest = nsfetchrequest(entityname: "userdata")   let sortdescriptor = nssortdescriptor(key: "savedtimemonthday", ascending: true)   fetchrequest.sortdescriptors = [sortdescriptor]    return fetchrequest }  func numberofsectionsintableview(tableview: uitableview) -> int {   if let sections = fetchedresultcontroller.sections {   return sections.count  }   return 0 }  func tableview(tableview: uitableview, numberofrowsinsection section: int) -> int {   if let sections = fetchedresultcontroller.sections {     let currentsection = sections[section]     return currentsection.numberofobjects   }    return 0 } 

for understand want sort entries based on date created/saved, way add time stamp attribute entity , populate attribute when saving object. then, use sortdescriptor sort records fetch based on timestamp attribute. along lines of:

let sortdescriptor = nssortdescriptor(key: "savedtimestamp", ascending: true) let fetchrequest = nsfetchrequest(entityname: "myrecord") fetchrequest.sortdescriptors = [sortdescriptor] //- fetch records var savedrecords: [myrecord]? {      savedrecords = managedobjectcontext.executefetchrequest(fetchrequest) as? [myrecord] } catch {      print("the calamity!") } 

hope helps.


Comments