2013-05-21 2 views
0

Может ли кто-нибудь помочь мне в проблеме, которую я испытываю?События не отображаются после reloaddata в Timelineview в календаре Tapku

Я использую Дневной календарь Календарь Tapku для отображения событий. События отображаются правильно, когда календарь загружается в первый раз. Если я изменю дату, давайте скажем либо вчера, либо завтра, календарь не отображает события.

Я реализовал следующие события.

- (void)calendarDayTimelineView:(TKCalendarDayView *)calendarDay didMoveToDate:(NSDate *)date 
{ 
//Here is my logic to pull the data from db server. 
//After this I am calling the 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; 
} 

Я отлажена код, данные получение назначены на события, но я не в состоянии рассмотреть любую вещь в календаре.

Pls .. помощь в устранении этой проблемы.

С уважением,

g.v.n.sandeep

+0

Вы все это исправили? – Zerho

ответ

1

Там есть еще один способ решить эту проблему.

Как вы видите, в приведенных ниже способов:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.title = NSLocalizedString(@"Day View", @""); 


    self.data = @[ 
    @[@"Meeting with five 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 the king at the castle", @"Burger King", @19, @30, @100, @0]]; 
} 

self.data загружается.

Мы можем перенести процесс загрузки в методы «viewWillAppear», чтобы обновлять данные, если вы делаете некоторые записи. Обратите внимание, что нет способа добавить событие к определенной дате. Но мы можем добавить следующее: @ [@ «Fishy Fishy Fishfelayyyyyyyyyy», @ «McDonalds», @ 48, @ 00, @ 50, @ 0]. @ 48 означает событие послезавтра.

Итак, сначала вы должны рассчитать интервал между конкретной датой и self.dayview.date (сегодня). Эти коды могут помочь:

- (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]; 
} 

Ниже следует комментарий:

if([eventDate compare:[NSDate dateWithTimeIntervalSinceNow:-24*60*60]] == NSOrderedAscending) return @[]; 
if([eventDate compare:[NSDate dateWithTimeIntervalSinceNow:24*60*60]] == NSOrderedDescending) return @[]; 

Но обратите внимание на часовой пояс. Я думаю, что не так просто вернуть правильный временной массив, рассчитанный выше.

Более того, я думаю, что необходимо добавить метод, который добавляет событие в определенный день в DayViewController.

Примечание: поскольку у меня есть некоторая кодировка, если ваше время составляет @ 900 часов, событие не будет отображаться в дневном режиме ... но через 500 часов оно работает хорошо.

Какие ужасные проекты здесь! В ожидании более полного контроля наблюдения за днем ​​...

Смежные вопросы