4

看起来 NSSortDescriptor 应该是一个相当容易使用的类。

我在 CoreData 中存储了一个实体,该实体具有 NSDate 类型的属性,适当地命名为 @"date"。我正在尝试将排序描述符应用于 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];
4

4 回答 4

3

这是有关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;
}];
于 2012-08-27T16:35:22.657 回答
3

对我来说,单独的排序例程(函数或块)看起来有点矫枉过正。我经常使用您在代码中显示的排序描述符方法按日期属性对核心数据实体进行排序。它每次都能完美运行。

显然,肯定还有其他错误。

  • 检查类型是否在您的托管对象模型编辑器和类文件(Data.h在您的情况下)中正确设置。
  • 此外,请检查您是否没有操作此属性,以便创建顺序随之而来。
  • 另外,请确保您没有将此属性与另一个 type 属性混淆NSDate
于 2012-08-27T20:44:38.913 回答
0

添加时间戳 - 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];
于 2017-05-04T06:04:40.727 回答
-1

只需将示例“”日期更改为日期

NSSortDescriptor *sortDescriptor = 
  [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];

改成

NSSortDescriptor *sortDescriptor = 
  [[NSSortDescriptor alloc] initWithKey:@"Date" ascending:YES];

它工作得很好

于 2013-05-01T12:42:23.173 回答