1

私は経費トラッカーの種類のアプリケーションに取り組んでいます。コアデータを使用して、並べ替えられたデータを完全に保存および取得できます。

私は日付を保存しています。ソートされた順序で日付を取得できますが、セクションヘッダーの日付とそのテーブルの関連データが必要です。

例: 2011 年 12 月 31 日 ---------> セクション ヘッダー
xxxxxxx yyyyyy ----->ラベル付きセル

2012 年 1 月 1 日---------->セクション ヘッダー
xxxxxxx yyyyyy ------>ラベル付きのセル。

ソートされた順序で日付を受け取ることができますが、ソートされた順序でセクション ヘッダーに表示する方法と、tableView-noOfSections メソッドでセクション数を宣言する方法を教えてください。

// データの取得に使用したコード。

- (void)viewDidLoad
{

AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"NewExpense" inManagedObjectContext:context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSSortDescriptor *date = [[NSSortDescriptor alloc]initWithKey:@"date" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:date,nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setEntity:entityDesc];
NSError *error;
self.listOfExpenses = [[context executeFetchRequest:fetchRequest error:&error]retain]    [fetchRequest release];
[super viewDidLoad];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{    
return 1;// as of now i have taken one.
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
[self.listOfExpenses count]; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  //labels are created and added to the cell's subview.

NSManagedObject *records = nil;
records = [self.listOfExpenses objectAtIndex:indexPath.row];
self.firstLabel.text = [records valueForKey:@"category"];
NSString *dateString = [NSString stringWithFormat:@"%@",[records valueForKey:@"date"]];
NSString *dateWithInitialFormat = dateString;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:dateWithInitialFormat];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSString *dateWithNewFormat = [dateFormatter stringFromDate:date];
self.secondLabel.text = dateWithNewFormat;
NSString *amountString = [NSString stringWithFormat:@"%@",[records valueForKey:@"amount"]];
self.thirdLabel.text = amountString;
totalAmount = totalAmount + [amountString doubleValue];
}
4

2 に答える 2

0

使用できますNSSortDescriptor

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    ...
    NSSortDescriptor * sort = [[NSSortDescriptor alloc] initWithKey:sortingKey ascending:ascending];
    NSArray * sortDescriptors = [NSArray arrayWithObject: sort];
    [request setSortDescriptors:sortDescriptors];

sortingKeyあなたのケースで渡すようにdate

ここのドキュメントを参照してNSSortDecsriptorください: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/Reference/Reference.html

于 2012-04-30T08:26:31.383 に答える
0

セクション ヘッダーの日付は少し扱いに​​くいですが、Apple からの非常に優れたサンプル コードがあり、現在のアプリの 1 つでうまく使用しています。DateSectionTitlesを見てください。

NSFetchedResultsControllerつまり、 a を使用し、エンティティの別のプロパティでを定義する必要がありsectionNameKeyPathます (日付自体は秒まで正確であるため、実行できません)。上記ではnumberOfSectionsなく、フェッチされた結果コントローラーが提供するものを返す必要があります1numberOfRowsInSection同様に調整する必要があります。

Appleprimitive dateは、セクション ヘッダーの文字列をフォーマットする必要があるときに、a を計算して再構築します。すべて非常に簡単です。サンプルコードに従うだけで、すぐにこれを解決できます。

于 2012-05-08T08:47:54.170 に答える