Hi,

Many thanks to both of you for your very helpful replies - much appreciated! 
I've gone with Ken's solution, which works perfectly for what I need. For the 
sake of the archives, I've attached the method I created based on Ken's code, 
which just creates a hierarchical dictionary of objects with the hierarchy 
Year->Month->Day, with a "Title" key for each object, so that it can be used 
easily enough in the data source an NSOutlineView (which is how I'll be using 
it).

Thanks again - and happy holidays.

All the best,
Keith

-- Ken's code modified for use with an NSOutlineView data source or suchlike --

- (NSMutableDictionary *)diarySpacesForYear:(int)year
{
        NSString *yearStr = [NSString stringWithFormat:@"%i", year];
        
        NSDate *startDate = [NSDate dateWithNaturalLanguageString:[NSString 
stringWithFormat:@"January 1 %i", year]];
        NSDate *endDate = [NSDate dateWithNaturalLanguageString:[NSString 
stringWithFormat:@"January 1 %i", year+1]];
        
        NSMutableArray *newDiarySpaces = [NSMutableArray array];

        NSMutableDictionary *currentMonth = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:
                                                                                
 NSLocalizedString(@"January",nil), @"Title",
                                                                                
 [NSMutableArray array], @"Days",
                                                                                
 yearStr, @"Year",
                                                                                
 [NSNumber numberWithInt:NSMonthCalendarUnit], @"CalendarUnit",
                                                                                
 nil];
        int secondsPerDay    = 60 * 60 * 24;
        
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
        //[dateFormatter setDateStyle:NSDateFormatterFullStyle];
        //[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
        [dateFormatter setDateFormat:@"d - EEEE"];
        
        // init list.
        [newDiarySpaces addObject:currentMonth];
        
        NSMutableDictionary *day = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:
                                                                [dateFormatter 
stringFromDate:startDate], @"Title",
                                                                [NSNumber 
numberWithInt:NSDayCalendarUnit], @"CalendarUnit",
                                                                nil];
        [[currentMonth objectForKey:@"Days"] addObject:day];
        
        // Loop until interval >= 0.
        while ([startDate timeIntervalSinceDate:endDate] < 0)
        {
                // Get the next day.
                startDate = [startDate addTimeInterval:secondsPerDay];
                
                // Check we are still in the year, so that we don't add 1st Jan 
of the next year.
                NSString *checkYear = [startDate 
descriptionWithCalendarFormat:@"%Y"
                                                                                
                                          timeZone:[NSTimeZone localTimeZone]
                                                                                
                                                locale:[[NSUserDefaults 
standardUserDefaults] dictionaryRepresentation]];
                if ([checkYear isEqualToString:yearStr] == NO)
                        break;  // We're into another year, so go no further.
                
                // Get month from date.
                NSString *checkMonth = [startDate 
descriptionWithCalendarFormat:@"%B"
                                                                                
                                           timeZone:[NSTimeZone localTimeZone]
                                                                                
                                                 locale:[[NSUserDefaults 
standardUserDefaults] dictionaryRepresentation]];
                
                // If month is different add it to the list of months.
                if ([checkMonth isEqualToString:[currentMonth 
objectForKey:@"Title"]] == NO)
                {
                        currentMonth = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:
                                                        checkMonth, @"Title",
                                                        [NSMutableArray array], 
@"Days",
                                                        yearStr, @"Year",
                                                        [NSNumber 
numberWithInt:NSMonthCalendarUnit], @"CalendarUnit",
                                                        nil];
                        [newDiarySpaces addObject:currentMonth];
                }
                
                // Add date to list of days in this month.
                NSMutableDictionary *day = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:
                                                                        
[dateFormatter stringFromDate:startDate], @"Title",
                                                                        
[NSNumber numberWithInt:NSDayCalendarUnit], @"CalendarUnit",
                                                                        nil];
                [[currentMonth objectForKey:@"Days"] addObject:day];
        }
        
        [dateFormatter release];
        
        return [NSMutableDictionary dictionaryWithObjectsAndKeys:
                        yearStr, @"Title",
                        newDiarySpaces, @"Months",
                        [NSNumber numberWithInt:NSYearCalendarUnit], 
@"CalendarUnit",
                        nil];
}




      
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to