开发者

How to use Tapku Calendar Framework with NSFetchRequest?

I'm trying to get the Tapku Calendar Library working with core data in my app. I have got the calendar setup but what I am trying to do now is get the dot markers to display for dates which are saved in my core data.

I am trying to follow this example (http://developinginthedark.com/posts/iphone-tapku-calendar-markers) but I'm stuck when mixing it with core data.

The method I need to work with is:

- (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 c开发者_如何学JAVAomponents 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];
}


there is a class like TKCalendarMonthView check that which will have dots to be displayed depending upon the array which you will give from core data. the array from your core data which will be a date will compared with dates for the particular month which you show in calendar if both dates matches then BOOL will return as it will marked with "."..


You could do that using this method:

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


        }

Hope that would solve your problem....else you could so it by your own just setting up the [dataArray addObject:[NSNumber numberWithBool:NO]]; to yes/no based on your condition.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜