【问题标题】:Fetch objects from core data with the 10 soonest dates从 10 个最早日期的核心数据中获取对象
【发布时间】:2013-04-09 22:05:07
【问题描述】:

我的 CoreData 数据库中有对象具有 NSDate 类型的“日期”属性。如何获取具有 10 个最早日期的对象?

这是我目前所拥有的:

NSFetchRequest *fetchRequest = [NSFetchRequest new];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([MyManagedObject class]) inManagedObjectContext:self.database.managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSArray *result = [self.database.managedObjectContext executeFetchRequest: fetchRequest error: nil];

我相信这会将我所有的托管对象按排序顺序返回,但我真的只需要 10 个最新的对象。我怎样才能做到这一点?使用NSFetchRequest 对它们进行排序而不是全部获取它们然后以编程方式对其进行排序会更快吗?

【问题讨论】:

  • 添加 fetchRequest.fetchLimit = 10。对于该请求,您将获得最多 10 个实体。

标签: ios objective-c core-data


【解决方案1】:

按降序对记录进行排序,我们fetchLimit 仅获得最新结果:

NSFetchRequest *fetchRequest = [NSFetchRequest new];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([MyManagedObject class]) 
                                  inManagedObjectContext:self.database.managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" 
                                                               ascending:NO];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
[fetchRequest setFetchLimit:10];
NSArray *result = [self.database.managedObjectContext executeFetchRequest:fetchRequest 
                                                                    error:nil];

【讨论】:

    【解决方案2】:
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
    ...
    NSArray* tenSoonestElements = [result subarrayWithRange:NSMakeRange(0, 10)];
    

    【讨论】:

    • 这是否比像上面建议的那样限制我获取的数量更好?
    • 配置文件和测试。我不确定它会有什么不同,因为请求仍然需要提取所有记录才能正确排序。但分析将确认这是否属实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多