Wie implementiere ich Schaltflächen für den vorherigen / nächsten Monat und zeige Daten für den aktuellen Monat an?

Szenario:

Ich habe eine iOS-Spesenverfolgungsanwendung und speichere Spesen von einem Spesen-Detailansichts-Controller in einer Tabellenansicht (mit abgerufenem Ergebnis-Controller), in der die Liste der Spesen zusammen mit der Kategorie, dem Betrag und dem Datum angezeigt wird. Ich habe in meiner Entität "Money" ein Datumsattribut, das eine übergeordnete Entität für einen Aufwand oder ein Einkommen ist.

Frage:

Grundsätzlich möchte ich meine Ausgaben monatlich kategorisieren und als Abschnittsüberschrift anzeigen, z. B .: (1. November - 30. November 2012) und die Ausgabenmenge und zugehörige Informationen für diesen bestimmten Monat anzeigen. In dieser Ansicht gibt es zwei Schaltflächen. Wenn ich die rechte Taste drücke, wird der Monat um einen Monat erhöht (1. Dezember - 31. Dezember 2012), und auf ähnliche Weise wird der Monat um einen Monat verringert, wenn die linke Taste gedrückt wird.

Wie würde ich das erreichen? Ich versuche den folgenden Code - was irgendwie funktioniert. Angenommen, ich habe meine aktuelle Abschnittsüberschrift als (01.11.-30.11.2012) und wenn ich die linke Taste drücke, wird mir die Abschnittsüberschrift (01.10.-30.10.2012) angezeigt, die falsch ist. Es sollte der 31.10.2012 sein und nicht 30. Oktober 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;
}

Dann habe ich eine Methode namens "monthCalculation", in der ich die beiden oben genannten Methoden aufrufe.

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

Jetzt der folgende Code, wenn ich die linke Taste drücke (um den Monat um einen Monat zu verringern):

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

Der folgende Code, wenn ich die rechte Taste drücke (um den Monat um einen Monat zu erhöhen):

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

Mache ich das richtig? Oder gibt es einen besseren Weg, dies zu erreichen? Jede Hilfe wird geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage