ios - Events are not getting displayed after reloaddata in Timelineview of Tapku Calendar -
can 1 me issue experiencing?
i using tapku calendar library day view in order display events. events getting displayed when calendar loads first time. if change date lets either yesterday or tomorrow, calendar not displaying events.
i have implemented following events.
- (void)calendardaytimelineview:(tkcalendardayview *)calendarday didmovetodate:(nsdate *)date { //here logic pull data db server. //after calling method below. [self.dayview reloaddata]; } - (nsarray *) calendardaytimelineview:(tkcalendardayview*)calendardaytimeline eventsfordate:(nsdate *)eventdate{ self.myappointments = nil; nsfetchrequest *fetchrequest = [[[nsfetchrequest alloc] init] autorelease]; nsentitydescription *entity = [nsentitydescription entityforname:@"tasks" inmanagedobjectcontext:self.managedobjectcontext]; [fetchrequest setentity:entity]; nserror *error; self.myappointments = [self.managedobjectcontext executefetchrequest:fetchrequest error:&error]; if([eventdate compare:[nsdate datewithtimeintervalsincenow:-24*60*60]] == nsorderedascending) return @[]; if([eventdate compare:[nsdate datewithtimeintervalsincenow:24*60*60]] == nsordereddescending) return @[]; nsdatecomponents *info = [[nsdate date] datecomponentswithtimezone:calendardaytimeline.timezone]; info.second = 0; nsmutablearray *ret = [nsmutablearray array]; for(tasks *apt in self.myappointments){ tkcalendardayeventview *event = [calendardaytimeline dequeuereusableeventview]; if(event == nil) event = [tkcalendardayeventview eventview]; event.identifier = nil; event.titlelabel.text = apt.task_subject; if ( [alltrim(apt.location) length] != 0 ) { event.locationlabel.text = apt.location; } nsdate *startdate = apt.task_start; nsdate *enddate = apt.task_end; nscalendar *calendar = [nscalendar currentcalendar]; nsdatecomponents *components = [calendar components:(nshourcalendarunit | nsminutecalendarunit) fromdate:startdate]; nsinteger hour = [components hour]; nsinteger minute = [components minute]; info.hour = hour; info.minute = minute; event.startdate = [nsdate datewithdatecomponents:info]; components = [calendar components:(nshourcalendarunit | nsminutecalendarunit) fromdate:enddate]; hour = [components hour]; minute = [components minute]; info.hour = hour; info.minute = minute; event.enddate = [nsdate datewithdatecomponents:info]; [ret addobject:event]; } return ret; }
i have debugged code, data getting assigned events, not able view thing on calendar.
pls.. in fixing issue.
regards,
g.v.n.sandeep
there has way solve problem.
as see, in methods below:
- (void)viewdidload { [super viewdidload]; self.title = nslocalizedstring(@"day view", @""); self.data = @[ @[@"meeting 5 random dudes", @"five guys", @960, @0, @1000, @30], @[@"unlimited bread rolls got me sprung", @"olive garden", @7, @0, @12, @0], @[@"appointment", @"dennys", @15, @0, @18, @0], @[@"hamburger bliss", @"wendys", @15, @0, @18, @0], @[@"fishy fishy fishfelayyyyyyyy", @"mcdonalds", @5, @30, @6, @0], @[@"turkey time...... oh wait", @"chick-fela", @14, @0, @19, @0], @[@"greet king @ castle", @"burger king", @19, @30, @100, @0]]; }
self.data loaded.
we can move loading process "viewwillappear" methods update data if writing. note that, there has no method add event specific date. can add event this: @[@"fishy fishy fishfelayyyyyyyy", @"mcdonalds", @48, @00, @50, @0]. @48 means event @ day after tomorrow.
so, first should calculate interval between specific date , self.dayview.date(today). following codes may help:
- (nsarray *)gettimefromnow:(nsdate *)startdate enddatetime:(nsdate *)enddate { nsdate *todaydate = [nsdate date]; nstimeinterval startfromnowseconds = [startdate timeintervalsincedate:todaydate]; nstimeinterval endfromnowseconds = [enddate timeintervalsincedate:todaydate]; nsnumber *starthour = [nsnumber numberwithint:startfromnowseconds / (60 * 60)]; nsnumber *startminute = [nsnumber numberwithint:startfromnowseconds / 60 - starthour.intvalue * 60]; nsnumber *endhour = [nsnumber numberwithint:endfromnowseconds / (60 * 60)]; nsnumber *endminute = [nsnumber numberwithint:endfromnowseconds / 60 - endhour.intvalue * 60]; return @[starthour, startminute, endhour, endminute]; }
below should commented:
if([eventdate compare:[nsdate datewithtimeintervalsincenow:-24*60*60]] == nsorderedascending) return @[]; if([eventdate compare:[nsdate datewithtimeintervalsincenow:24*60*60]] == nsordereddescending) return @[];
but pay attention timezone. think it's not easy return right time array calculated above.
more over, think essential necessary add method add event specific day in dayviewcontroller.
note: have coding, if time @900 hours now, event not showed in dayview... @500 hours works well.
what terrible designs here! waiting more complete dayviewcontroller ...
Comments
Post a Comment