¿Cómo implemento los botones del mes anterior / siguiente y muestro las fechas del mes actual?

Guión:

Tengo una aplicación iOS de seguimiento de gastos y estoy almacenando los gastos de un controlador de vista de detalles de gastos en una vista de tabla (con el controlador de resultados obtenidos) que muestra la lista de gastos junto con la categoría, el monto y la fecha. Tengo un atributo de fecha en mi entidad "Dinero", que es una entidad matriz, ya sea para un gasto o un ingreso.

Pregunta:

Lo que quiero básicamente es categorizar mis gastos mensualmente y mostrarlos como título de encabezado de sección, por ejemplo: (1 de noviembre a 30 de noviembre de 2012) y muestra la cantidad de gastos y cosas relacionadas de acuerdo con ese mes en particular. Se proporcionan dos botones en esa vista, si presiono el botón derecho, aumentará el mes en un mes (del 1 de diciembre al 31 de diciembre de 2012) y, de manera similar, el botón izquierdo disminuirá el mes en un mes.

¿Cómo lograría eso? Estoy probando el siguiente código, que está funcionando. Supongamos que tengo el encabezado de la sección actual como (1 de noviembre - 30 de noviembre de 2012) y cuando presiono el botón izquierdo, me da el encabezado de la sección (1 de octubre - 30 de octubre de 2012) que es incorrecto, debería ser el 31 de octubre de 2012 y no el 30 de octubre de 2012.

- (NSDate *)firstDateOfTheMonth
{
    self.startDate = [NSDate date];

    NSCalendar* calendar = [NSCalendar currentCalendar];

    [calendar setTimeZone:[NSTimeZone localTimeZone]];

    NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:self.startDate];

    [components setDay:1];

    firstDateOfTheMonth = [[calendar dateFromComponents:components] retain];

    return firstDateOfTheMonth;

}

- (NSDate *)lastDateOfTheMonth
{
    NSCalendar* calendar = [NSCalendar currentCalendar];

    [calendar setTimeZone:[NSTimeZone localTimeZone]];

    NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:firstDateOfTheMonth];

    [components setMonth:[components month]+1];
    [components setDay:0];

    lastDateOfTheMonth = [[calendar dateFromComponents:components] retain];

    return lastDateOfTheMonth;
}

Luego tengo un método llamado "monthCalculation" en el que llamo a los dos métodos anteriores.

- (void)monthCalculation
{
    [self firstDateOfTheMonth];
    [self lastDateOfTheMonth];
}

Ahora el siguiente código cuando presiono el botón izquierdo (para disminuir el mes por un mes):

- (IBAction)showPreviousDates:(id)sender
{
    [self monthCalculation];

    NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
    [dateComponents setMonth:-1];

    NSDate *newDate1 = [[NSCalendar currentCalendar]
                        dateByAddingComponents:dateComponents
                        toDate:firstDateOfTheMonth options:0];

    NSDate *newDate2 = [[NSCalendar currentCalendar]
                        dateByAddingComponents:dateComponents
                        toDate:lastDateOfTheMonth options:0];

    self.startDate = newDate1;
    self.endDate = newDate2;

    NSLog(@" self start date in previous mode =%@", self.startDate);
    NSLog(@" self end date in previous mode =%@", self.endDate);
} 

El siguiente código cuando presiono el botón derecho (para incrementar el mes en un mes):

- (IBAction)showNextDates:(id)sender
{
    [self monthCalculation];

    NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
    [dateComponents setMonth:1];

    NSDate *newDate1 = [[NSCalendar currentCalendar]
                        dateByAddingComponents:dateComponents
                        toDate:firstDateOfTheMonth options:0];

    NSDate *newDate2 = [[NSCalendar currentCalendar]
                        dateByAddingComponents:dateComponents
                        toDate:lastDateOfTheMonth options:0];

    self.startDate = newDate1;
    self.endDate = newDate2;

    NSLog(@" self start date in previous mode =%@", self.startDate);
    NSLog(@" self end date in previous mode =%@", self.endDate);
} 

¿Lo estoy haciendo bien? ¿O hay una mejor manera de lograrlo? Cualquier ayuda será apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta