0

私が経験している問題を解決できる人はいますか?

イベントを表示するために、Tapku Calendar Library Day View を使用しています。カレンダーが初めて読み込まれたときに、イベントが正しく表示されるようになりました。日付を昨日または明日に変更すると、カレンダーにイベントが表示されません。

以下のイベントを実装しました。

- (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 ..この問題の修正を手伝ってください。

よろしく、

gvnsandeep

4

1 に答える 1

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 Fishfelayyyyyyyy", @"McDonalds", @48, @00, @50, @0] のようなイベントを追加できます。@48 は明後日のイベントを意味します。

したがって、最初に特定の日付と self.dayview.date(today) の間の間隔を計算する必要があります。次のコードが役立つ場合があります。

- (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 時間はうまく機能します。

ここでなんてひどいデザインでしょう!より完全な dayviewcontroller を待っています ...

于 2013-09-24T05:38:44.107 に答える