2010-12-06 61 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;  

} 

是否可能進行排序,通過即將到來的生日?或者我是否必須將我的生日正常化,以便我只能按月和日進行排序?任何輸入是不勝感激。

謝謝

回答

1

以下是您可以做的事情。

1)爲您的uBDay和uName設置NSSortDescriptors,這樣您的記錄將首先按生日排序,然後按名稱排序。

2)創建NSPredicate拉動到一定時間[NSDate now](今日即之間的所有生日)在未來(即30天到未來= [NSDate dateWithTimeIntervalSinceNow:kOneDayTimeInterval*30]

下面

示例代碼:

#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 2010-12-06 21:52:25