设想:
我有一个费用跟踪 iOS 应用程序,我将费用从费用详细视图控制器存储到表视图(带有获取的结果控制器)中,该表视图显示费用列表以及类别、金额和日期。我的实体“Money”中确实有一个日期属性,它是支出或收入的父实体。
问题:
我想要的基本上是按月对我的费用进行分类,并将其显示为部分标题,例如:(2012 年 11 月 1 日至 11 月 30 日),并根据该特定月份显示费用金额和相关内容。该视图中提供了两个按钮,如果我按下右键,它将使月份增加一个月(2012 年 12 月 1 日 - 2012 年 12 月 31 日),同样,左按钮会使月份减少一个月。
我将如何做到这一点?我正在尝试以下代码 - 这有点工作。假设我当前的部分标题为 (Nov1 - Nov 30, 2012),当我按下左键时,它给了我部分标题 (Oct 1 - Oct 30, 2012),这是错误的,应该是 2012 年 10 月 31 日而不是 2012 年 10 月 30 日。
- (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;
}
然后我有一个名为“monthCalculation”的方法,我在其中调用了上述两种方法。
- (void)monthCalculation
{
[self firstDateOfTheMonth];
[self lastDateOfTheMonth];
}
现在当我按下左键时下面的代码(将月份递减一个月):
- (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);
}
当我按下右键时以下代码(将月份增加一个月):
- (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);
}
我做对了吗?还是有更好的方法来做到这一点?任何帮助将不胜感激。