シナリオ:
私は経費追跡iOSアプリケーションを持っており、経費詳細ビューコントローラーからの経費をカテゴリと金額および日付とともに経費のリストを表示するテーブルビュー(フェッチされた結果コントローラーを含む)に保存しています。私のエンティティ「Money」には、費用または収入のいずれかの親エンティティである日付属性があります。
質問:
基本的には月ごとに経費を分類して、たとえば(2012年11月1日〜11月30日)のセクションヘッダータイトルとして表示し、その月ごとの経費額などを表示したいです。そのビューには2つのボタンがあります。右ボタンを押すと、月が1か月ずつ増加し(2012年12月1日から12月31日)、同様に左ボタンを押すと月が1か月ずつ減少します。
どうすればそれを達成できますか?私は次のコードを試しています-これはちょっと機能しています。現在のセクションヘッダーが(Nov1-2012年11月30日)で、左ボタンを押すとセクションヘッダー(2012年10月1日-2012年10月30日)が間違っていると仮定します。これは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;
}
次に、上記の2つのメソッドを呼び出す「monthCalculation」というメソッドがあります。
- (void)monthCalculation
{
[self firstDateOfTheMonth];
[self lastDateOfTheMonth];
}
左ボタンを押すと、次のコードが表示されます(月を1か月ずつデクリメントするため)。
- (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);
}
右ボタンを押すと、次のコードが表示されます(月を1か月ずつインクリメントするため)。
- (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);
}
私はそれを正しくやっていますか?またはこれを達成するためのより良い方法がありますか?どんな助けでもありがたいです。