Como faço para implementar os botões do mês anterior / próximo e mostrar as datas do mês atual?

Cenário:

Eu tenho um aplicativo iOS de controle de despesas e estou armazenando despesas de um controlador de exibição de detalhes de despesas em uma visão de tabela (com o controlador de resultados buscados) que mostra a lista de despesas junto com a categoria e a quantidade e a data. Eu tenho um atributo de data na minha entidade "Money", que é uma entidade pai para uma despesa ou uma renda.

Questão:

O que eu quero é basicamente categorizar minhas despesas em uma base mensal e exibi-lo como o título do cabeçalho da seção, por exemplo: (1 de novembro - 30 de novembro de 2012) e mostra a quantidade de despesas e material relacionado de acordo com esse mês específico. Dois botões são fornecidos nessa visualização, se eu pressionar o botão direito, ele aumentará o mês em um mês (1º de dezembro a 31 de dezembro de 2012) e, da mesma forma, o botão esquerdo diminuiria o mês em um mês.

Como eu conseguiria isso? Eu estou tentando o seguinte código - que é meio que trabalhando. Suponha que eu tenha meu cabeçalho de seção atual como (1º de novembro a 30 de novembro de 2012) e quando pressiono o botão esquerdo, ele me fornece o cabeçalho da seção (1º de outubro a 30 de outubro de 2012) que está errado, deve ser 31 de outubro de 2012 e não 30 de outubro 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;
}

Então eu tenho um método chamado "monthCalculation" no qual eu chamo os dois métodos acima.

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

Agora o seguinte código quando eu pressiono o botão esquerdo (para diminuir o mês por um mês):

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

O código a seguir quando eu pressiono o botão direito (para incrementar o mês por um mês):

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

Eu estou fazendo a coisa certa? ou há uma maneira melhor de conseguir isso? Qualquer ajuda será apreciada.