2012-03-09 87 views
2

的例如对象:核心数据:NSPredicate与由实体对象

Task *实体的NSDateComponents *dueDate(变形的)属性。并且打算提取值dueDate小于[NSDate date]的所有对象。 NSDateComponents对象创建日历单位常数NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit

[NSPredicate predicateWithFormat:@"dueDate < %@", [NSDate date]]是类型不匹配。如何在方程之前创建NSDate对象dueDate

或者还有更好的方法来比较NSDateComponents

回答

0

我想我找到了最好的解决方案。

首先,我写了一个类别:

@implementation NSDateComponents (SSDateComponent) 

- (NSComparisonResult)compare:(NSDateComponents *)anotherDateComponents { 
    return [[[NSCalendar currentCalendar] dateFromComponents:self] compare:[[NSCalendar currentCalendar] dateFromComponents:anotherDateComponents]]; 
} 

那么我希望我可以用<,>,==谓词格式。所以,我从当前日期(这也是我更好)发NSDateComponents *和我的谓词是这样的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"dueDate < %@", dateComponents]; 

我想知道,这可能是因为可转换型的核心数据dueDate的工作,但它似乎它完美精细。

0

谓语应该是这样的:

[NSPredicate predicateWithFormat:@"%@ < %@", [dueDate date], [NSDate date]] 

但是如果你只希望比较日期,谓语外,你可以只对它们进行比较是这样的:

if ([[dueDate date] compare:[NSDate date]] == NSOrderedAscending){ 
     //Then dueDate is earlier than [NSDate date], 
} 

您可以使用NSOrderedSame and NSOrderedDescending

+0

我没有尝试,但我相信'NSDateComponents * user500 2012-03-09 13:16:44

+0

你是绝对正确的,我认为这是一个NSDate,而不是一个NSDate组件。我在编辑我的答案。 – Lio 2012-03-09 13:28:23