2010-12-06 14 views
0

私はxcodeで最初のアプリケーションを構築しており、coreDataとNSFetchedResultControllerを使用して今後の誕生日で注文された人のリストを取得しようとしています。ここで今後の誕生日によるCoreDataの並べ替え

uBirthdays 
-------------- 
NSString uName 
NSDate uBday 

を次のように私のエンティティは、セットアップで私の現在のコードです:

- (NSFetchedResultsController *)fetchedResultsController { 

if (_fetchedResultsController != nil) { 
    return _fetchedResultsController; 
} 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"uBirthdays" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"uBday" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 

[fetchRequest setFetchBatchSize:20]; 

NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"sectionNameGen" cacheName:@"Root"]; 
self.fetchedResultsController = theFetchedResultsController; 
_fetchedResultsController.delegate = self; 

[sort release]; 
[fetchRequest release]; 
[theFetchedResultsController release]; 

return _fetchedResultsController;  

} 

はそれが誕生日でそれをソートするために、おそらくですか?または私は月日だけでソートすることができるように私の誕生日をde-normalizeする必要がありますか?どんな入力も大歓迎です。

ありがとうございました

答えて

1

あなたができることは次のとおりです。

1)uBDayとuNameにはNSSortDescriptorsを設定して、誕生日と名前の順にソートされるようにします。

2)下記の未来= [NSDate dateWithTimeIntervalSinceNow:kOneDayTimeInterval*30]

例のコードにすなわち30日(将来的には一定の時間までは、今日すなわち([NSDate now]間のすべての誕生日を引くNSPredicate)を作成します。

#define kOneDayTimeInterval 86400 // this is in seconds: 86400 = 1 day 

    - (NSFetchedResultsController *)fetchedResultsController { 
     ... 
     NSSortDescriptor *sortByBDay = [[NSSortDescriptor alloc] initWithKey:@"uBday" ascending:YES]; 
     NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"uName" ascending:YES]; 
     NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByBDay,sortByName, nil]; 
     [fetchRequest setSortDescriptors:sortDescriptors]; 
     [sortDescriptors release]; 
     [sortByName release]; 
     [sortByReleaseDate release];    
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(uBDay > %@) AND (uBDay <= %@)", [NSDate date], [NSDate dateWithTimeIntervalSinceNow:kOneDayTimeInterval*30]]; 
     [fetchRequest setPredicate:predicate]; 
     ... 
+0

お返事ありがとうございます。誕生日は過去から何年も保存されているので、これはうまくいかないでしょうか?あなたの誕生日が1983年の場合、それは今までに現れませんか? – lostincode

+0

あなたは絶対に正しいです!この場合、NSDateの書式設定が必要です。テーブルビューを使用して今後の誕生日を表示し、セクションでグループ化していますか? – Rog

+0

うん、それはテーブルビューになると私はセクションを把握することができましたが、 "今後の誕生日"で並べ替えることは、年が過去であるという事実のために失われているところです。 – lostincode

関連する問題