BBr*_*uce 1 sorting core-data nssortdescriptor ios
在我的应用程序中,我有一个表格视图,显示一个人的活动随着时间的推移.我想按天排序数据,然后按名字排序.问题是,由于其他原因,我需要在时间中存储NSDate.
现在,我有这个:
August 18, 2014 11:02 AM Bill B.
August 18, 2014 10:20 AM John D.
August 18, 2014 10:05 AM Adam S.
August 11, 2014 3:47 PM Debbie B.
August 11, 2014 2:13 PM Adam S.
Run Code Online (Sandbox Code Playgroud)
我想要忽略时间,只评估日期.像这样:
August 18, 2014 Adam S.
August 18, 2014 Bill B.
August 18, 2014 John D.
August 11, 2014 Adam S.
August 11, 2014 Debbie B.
Run Code Online (Sandbox Code Playgroud)
是否可以构建一个仅查看核心数据日期属性的月,日和年的排序描述符?
我会使用一个额外的属性sortDate.您可以在对象的setter startDate(或者您调用日期属性)中计算该属性.如果您在核心数据中存储多个对象,这是最快的方法.您可以使用瞬态属性并计算getter中的值,但这会对性能产生很大影响.
我在我的一个应用程序中使用了类似的东西:
- (void)setStartDate:(NSDate *)startDate {
[self willChangeValueForKey:@"startDate"];
[self setPrimitiveStartDate:startDate];
[self didChangeValueForKey:@"startDate"];
if (startDate) {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
// might want to save sortDate in UTC
// calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *sortDate;
if ([calendar rangeOfUnit:NSDayCalendarUnit startDate:&sortDate interval:NULL forDate:startDate]) {
self.sortDate = sortDate;
}
else {
NSLog(@"Can't create sort date from date %@", startDate);
}
}
else {
self.sortDate = nil;
}
}
Run Code Online (Sandbox Code Playgroud)
然后fetchRequest将使用sortDate和startDate进行排序和sortDate切片.
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSSortDescriptor *sdSortDate = [NSSortDescriptor sortDescriptorWithKey:@"sortDate" ascending:NO];
NSSortDescriptor *sdStartDate = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:NO];
request.sortDescriptors = @[sdSortDate, sdStartDate];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"sortDate" cacheName:@"MyFancyViewControllerCache"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4445 次 |
| 最近记录: |