【问题标题】:Query max NSDate in core data在核心数据中查询最大 NSDate
【发布时间】:2016-07-13 09:45:04
【问题描述】:

有没有办法在CoreData中查询NSDate。例如,如果我想要一个具有 highest NSDate 值的实体?我看到 NSExpression "max:" 只需要一个 NSNumber

【问题讨论】:

  • 你想要一个实体的最大日期的 fech 对象?

标签: ios objective-c core-data nsdate


【解决方案1】:

您可以直接在 SQLite 中执行此操作——无需获取所有内容然后过滤结果,也没有NSExpression 的复杂性。

要获取具有最大日期的一个对象,请执行以下操作(假设实体名称 Entity 和日期属性 timeStamp):

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp = self.@max.timeStamp"];
fetchRequest.predicate = predicate;

进行抓取。您将(最多)得到一个结果,这将是具有最大日期的实例。

如果您只想获取日期而不是整个托管对象,请在获取之前添加:

fetchRequest.resultType = NSDictionaryResultType;
fetchRequest.propertiesToFetch = @[ @"timeStamp" ];

【讨论】:

    【解决方案2】:

    您实际上可以只向 SQL 询问该值,而不是具有该值的对象:

    NSExpression *date = [NSExpression expressionForKeyPath:@"date"];
    NSExpression *maxDate = [NSExpression expressionForFunction:@"max:"
                                                      arguments:[NSArray arrayWithObject:maxDate]];
    NSExpressionDescription *d = [[[NSExpressionDescription alloc] init] autorelease];
    [d setName:@"maxDate"];
    [d setExpression:maxSalaryExpression];
    [d setExpressionResultType:NSDateAttributeType];
    
    [request setPropertiesToFetch:[NSArray arrayWithObject:d]];
    
    NSError *error = nil;
    NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error];
    if (objects == nil) {
        // Handle the error.
    } else {
        if (0 < [objects count]) {
            NSLog(@"Maximum date: %@", [[objects objectAtIndex:0] valueForKey:@"maxDate"]);
        }
    }
    

    获取托管对象下的更多详细信息 -> CoreData 文档中的获取特定值。

    执行查询,按日期字段 DESCENDING 排序,并使用 setFetchLim it:1。 它并不完美,但至少它有效。

    【讨论】:

      【解决方案3】:

      你可以得到它

      NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"tablename"];
      
      fetchRequest.fetchLimit = 1;
      fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"yourDate" ascending:NO]];
      
      NSError *error = nil;
      
      id person = [managedObjectContext executeFetchRequest:fetchRequest error:&error].firstObject;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 2021-12-23
        • 1970-01-01
        相关资源
        最近更新 更多