Как использовать Tapku Calendar Framework с NSFetchRequest? - PullRequest
0 голосов
/ 16 июня 2011

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

Я пытаюсь следовать этому примеру (http://developinginthedark.com/posts/iphone-tapku-calendar-markers) но я застрял при смешивании его с основными данными.

Метод, с которым мне нужно работать:

- (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate {    
    NSLog(@"calendarMonthView marksFromDate toDate");   
    NSLog(@"Make sure to update 'data' variable to pull from CoreData, website, User Defaults, or some other source.");
    // When testing initially you will have to update the dates in this array so they are visible at the
    // time frame you are testing the code.
    NSArray *data = [NSArray arrayWithObjects:
                     @"2011-01-01 00:00:00 +0000", @"2011-12-01 00:00:00 +0000", nil]; 


    // Initialise empty marks array, this will be populated with TRUE/FALSE in order for each day a marker should be placed on.
    NSMutableArray *marks = [NSMutableArray array];

    // Initialise calendar to current type and set the timezone to never have daylight saving
    NSCalendar *cal = [NSCalendar currentCalendar];
    [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    // Construct DateComponents based on startDate so the iterating date can be created.
    // Its massively important to do this assigning via the NSCalendar and NSDateComponents because of daylight saving has been removed 
    // with the timezone that was set above. If you just used "startDate" directly (ie, NSDate *date = startDate;) as the first 
    // iterating date then times would go up and down based on daylight savings.
    NSDateComponents *comp = [cal components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit | 
                                                    NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit) 
                                          fromDate:startDate];
    NSDate *d = [cal dateFromComponents:comp];

    // Init offset components to increment days in the loop by one each time
    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
    [offsetComponents setDay:1];    


    // for each date between start date and end date check if they exist in the data array
    while (YES) {
        // Is the date beyond the last date? If so, exit the loop.
        // NSOrderedDescending = the left value is greater than the right
        if ([d compare:lastDate] == NSOrderedDescending) {
            break;
        }

        // If the date is in the data array, add it to the marks array, else don't
        if ([data containsObject:[d description]]) {
            [marks addObject:[NSNumber numberWithBool:YES]];
        } else {
            [marks addObject:[NSNumber numberWithBool:NO]];
        }

        // Increment day using offset components (ie, 1 day in this instance)
        d = [cal dateByAddingComponents:offsetComponents toDate:d options:0];
    }

    [offsetComponents release];

    return [NSArray arrayWithArray:marks];
}

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Вы можете сделать это, используя этот метод:

     - (void) generateDataForStartDate:(NSDate*)start endDate:(NSDate*)end
        {

                 //just check the condition according to you...It;s your logic that would work
                 if([datestring isEqualToString:strtemp])
                    {
                        Done=YES;
                        [dataDictionary setObject:str forKey:d];//USed to show the data
                        [dataArray addObject:[NSNumber numberWithBool:YES]]; // This array would store the place where you need to set the Dot in Calender
                        j=1;
                    }
        // This is the logic for not setting the DOT
         if(j==0){
            [dataArray addObject:[NSNumber numberWithBool:NO]];
                }

        TKDateInformation info = [d dateInformation];
        info.day++;
        Done=NO;
        d = [NSDate dateFromDateInformation:info];
        if([d compare:end]==NSOrderedDescending) break;


        }

Надеюсь, что это решит вашу проблему .... иначе вы можете сделать это самостоятельно, просто установив [dataArray addObject: [NSNumber numberWithBool:НЕТ]];да / нет в зависимости от вашего состояния.

0 голосов
/ 16 июня 2011

есть класс, такой как TKCalendarMonthView, который проверяет точки, которые будут отображаться в зависимости от массива, который вы получите из основных данных.массив из ваших основных данных, который будет датой, будет сравниваться с датами для конкретного месяца, который вы показываете в календаре, если обе даты совпадают, то BOOL вернется, как это будет отмечено "." ..

...