0

シナリオ:

私は経費追跡iOSアプリケーションを持っており、経費詳細ビューコントローラーからの経費をカテゴリと金額および日付とともに経費のリストを表示するテーブルビュー(フェッチされた結果コントローラーを含む)に保存しています。私のエンティティ「Money」には、費用または収入のいずれかの親エンティティである日付属性があります。

質問:

基本的に、特定の週、月、または年の経費を分類し、セクションヘッダーのタイトルとして表示します(例:(2012年10月1日から10月7日))。それに応じて経費額と関連情報が表示されます。特定の週。そのビューには2つのボタンがあり、右ボタンを押すと週が1週間ずつ増え(2012年10月1日から10月7日までは2012年10月8日から10月15日が表示されます)、同様に左ボタンで週が減ります。一週間で。

私の質問は、上記のことをどのように達成するかです。私はいくつかの擬似コードを書いています-どんな助けでもいただければ幸いです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date == %@)", dateToFilterFor];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Expense" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"SomeCacheName"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

1週間でフィルタリングするには、述語は何である必要がありますか?また、フェッチされた結果コントローラーにセクション名を付けることを考えていますが、それは何でしょうか?

4

1 に答える 1

0

ユーザーが10月1日と10月7日を選択したと仮定します。

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy"];

NSString *str1 = @"10/01/2012";
NSDate *date1 = [formatter dateFromString:str1];

NSString *str2 = @"10/07/2012";
NSDate *date2 = [formatter dateFromString:str2];

として使用して、

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", date1, date2];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Expense" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"SomeCacheName"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

日付を追加するには、

int addDaysCount = 7; //try with negative values for fetching previous week.

NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:addDaysCount];

NSDate *newDate1 = [[NSCalendar currentCalendar] 
                              dateByAddingComponents:dateComponents 
                                              toDate:date1 options:0];
NSDate *newDate2 = [[NSCalendar currentCalendar] 
                              dateByAddingComponents:dateComponents 
                                              toDate:date2 options:0];

上記の述語をnewDate1とで使用して、newDate2これらの日付に対応する新しい経費を取得します。

特定の週の日曜日を取得する場合は、を使用しますNSDateComponents

NSDateComponents *components = [NSDateComponents new]; 
components.weekday = 1;//represents sunday 
components.year = 2012; 
components.weekOfMonth = 1;
components.month = 10; //etc..

NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents: components]; 

とそのプロパティチェックの詳細についてはNSDateComponents

于 2012-11-08T08:41:45.967 に答える