谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败

Posted

技术标签:

【中文标题】谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败【英文标题】:Predicate fails with fetching object with attribute type of "NSDate" object from Core Data 【发布时间】:2014-02-09 19:17:57 【问题描述】:

我从互联网收到的日期格式如下:

“2014-12-01T20:00:00Z”

我正在以这种格式在核心数据中存储日期..属性类型也是“Nsdate”类型..

- (NSDateFormatter *)dateFormate


    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy'-'dd'-'MM'T'HH':'mm':'ssZZZ"];

使用

获取 [NSDate Date] 的开始时间
- (NSDate *)cc_dateByMovingToBeginningOfDay

  unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
  NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:self];
  [parts setHour:0];
  [parts setMinute:0];
  [parts setSecond:0];
  return [[NSCalendar currentCalendar] dateFromComponents:parts];

[NSDate Date] 的结束时间,使用:

- (NSDate *)cc_dateByMovingToEndOfDay

  unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
  NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:self];
  [parts setHour:23];
  [parts setMinute:59];
  [parts setSecond:59];
  return [[NSCalendar currentCalendar] dateFromComponents:parts];

并用这个获取:

- (void)ObjectsFrom:(NSDate *)fromDate to:(NSDate *)toDate 
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"((due_at > %@) AND (due_at < %@))",fromDate, toDate];

但记录始终为零。因为我知道在我今天的日期我在数据库中有多个记录..我不知道为什么会发生这种情况..

我也使用 NSComparisonResult 作为日期但是没有记录是在日期之间。

所以请帮我解决这个问题..

【问题讨论】:

我已经像这样完成了 NSComparisonResult 但它也失败了.. static BOOL IsDateBetweenInclusive(NSDate *date, NSDate *begin, NSDate *end) return [date compare:begin] != NSOrderedAscending && [日期比较:结束]!= NSOrderedDescending; 【参考方案1】:

您的日期格式错误。 “2014-12-01T20:00:00Z”中的“Z”是“ISO8601时区格式”,需要日期格式为“ZZZZZ”:

[formatter setDateFormat:@"yyyy'-'dd'-'MM'T'HH':'mm':'ssZZZZZ"];

否则dateFromString: 将返回nil

见http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns 了解更多信息。

【讨论】:

以上是关于谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败的主要内容,如果未能解决你的问题,请参考以下文章

如何根据来自多个 Core Data 属性的计算值进行排序

在 Core Data 可转换字符串数组上返回匹配项的 Swift 谓词

使用谓词在 Core Data 中获取父母的所有孩子

swift Core Data谓词过滤给定父级的所有子数据

Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同

Core Data Fetch 在第二次使用谓词时返回 0 个结果