2012-03-09 3 views
2

Например:Основные данные: NSPredicate с объектом из объекта сущности

Существует а (трансформер) свойство Task * объекта NSDateComponents *dueDate. И есть намерение получать все объекты с NSDate * значением 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 в Core Data, но это, кажется, работает отлично хорошо.

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

+0

Вы абсолютно правы, я думал, что это NSDate, а не компонент NSDate. Я редактирую свой ответ. – Lio

Смежные вопросы