NSSortDescriptor应该对NSDates进行排序
看来NSSortDescriptor应该是一个相当简单的类。
我在CoreData中存储了一个名为@“date”的实体,其类型为NSDate。 我试图将一个排序描述符应用于NSFetchRequest,它似乎没有返回我所希望的结果。
我希望的结果是简单地按时间顺序排列日期,而将它们按照它们添加到CoreData的顺序返回。
也许你可以提供指导?
参数'升'是什么控制排序?
一些代码:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Data" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entityDesc];
[fetchRequest setFetchBatchSize:10];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
单独的排序例程(函数或块)对我来说看起来过度杀伤。 我经常按日期attribtues排序核心数据实体,只是使用您在代码中显示的排序描述符方法。 它每次都很完美。
显然,一定有其他的错误。
Data.h
,在您的情况下)中。 NSDate
类型的另一个属性混合在一起。 这里是关于NSSortDescriptors的更多信息
或者,如果您想在为coreDate获取日期后对日期数组进行排序,请执行以下操作:
//This is how I sort an array of dates.
NSArray *sortedDateArray = [dateArray sortedArrayUsingFunction:dateSort context:NULL];
// This is a sorting function
int dateSort(id date1, id date2, void *context)
{
return [date1 compare:date2];
}
这里是直接从苹果排序整数的代码(只需修改排序日期):NSComparator
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
添加timestamp - CoreData实体中的字符串类型字段
创建日期
在插入记录期间
NSManagedObject *newCredetial = [NSEntityDescription insertNewObjectForEntityForName:@"Name" inManagedObjectContext:context];[newCredetial setValue:[self getDate] forKey:@"creationDate"];
日期功能
- (NSString *)getDate{
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"ddMMyyyyhhmmssss";
return [formatter stringFromDate:date];}
和在获取模块期间使用简短描述
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest1 = [[NSFetchRequest alloc] initWithEntityName:@"Name"];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
[fetchRequest1 setSortDescriptors:@[sortDescriptor]];
arrNameInfo = [[managedObjectContext executeFetchRequest:fetchRequest1 error:nil] mutableCopy];
链接地址: http://www.djcxy.com/p/36169.html
上一篇: NSSortDescriptor should sort NSDates
下一篇: NSFetchedResultsController sort by first name or last name