如何根据日期键对核心数据实体进行排序

时间:2015-11-03 15:23:45

标签: entity-framework sorting date core-data nsdate

我在Core Data中有一个名为Info的实体和一个名为'date'的属性,其类型为string。我希望能够以合适的日期格式通过日期对实体进行排序。目前,'date'是一个格式为'mm / dd / yy'的字符串。如何适当地格式化字符串并执行排序。

这是我目前的代码段:

- (NSFetchedResultsController *)fetchedResultsController
{
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [delegate managedObjectContext];
    NSFetchRequest *fetchRequest1 = [NSFetchRequest fetchRequestWithEntityName:@"Info"];
    NSSortDescriptor *sort = [[NSSortDescriptor alloc]initWithKey:@"date" ascending:NO];
    [fetchRequest1 setSortDescriptors:@[sort]];

    NSError *error0 =nil;
    NSArray *results = [context executeFetchRequest:fetchRequest1 error:&error0];
    fetchedObjects2 = results;
    [fetchRequest1 setFetchBatchSize:20];

    if (_fetchedResultsController != nil)
        _fetchedResultsController = nil;
    NSFetchedResultsController *theFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest1
                                        managedObjectContext:context sectionNameKeyPath:nil
                                                   cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;
    fetchedResultsController.delegate = self;

    return fetchedResultsController;
}

这会显示在表格中。

- (void)reloadTableViewData
{
    NSError *error;

    if (![[self fetchedResultsController0] performFetch:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }

    [TableView reloadData];
    [self.view setNeedsDisplay];
}

这是实体:

'Info' Entity

2 个答案:

答案 0 :(得分:0)

通常,您应该以允许轻松操作数据的方式存储数据。您可以随时按摩它以获得您想要的任何演示效果。

如果你真的想把日期保存为mm / dd / yy,你还应该存储另一个项目,比如sortableDate,它是数字表示或字符串格式为yyyymmdd。

答案 1 :(得分:0)

除了NSDate之外,绝对没有理由将日期存储在其他任何内容中。重构使用正确的日期对象和排序将是一件轻而易举的事。

如果您需要字符串,请使用日期格式化程序。

let formatter = NSDateFormatter()
formatter.dateFormat = "MM/dd/yy"
let stringRepresentation = formatter.stringFromDate(dateObject)

(请注意,这只是演示了如何获取特定字符串。实际上,您应该为不同的语言环境提供正确的日期字符串,即不要对dateFormat进行硬编码。)