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