2013-07-15 3 views
1

У меня есть NSManagedObject, foo, в котором хранится NSDate, который был создан. У этого также есть другое поле, срок службы которого хранит количество секунд, в течение которых объект действителен. Каждый foo может иметь другое значение продолжительности жизни. Можно ли вернуть всех участников, не превышающих их продолжительность жизни? Я не уверен, как выразить это в моем NSPredicate, или если это возможно?Основные данные, поиск объектов на основе объектов собственное имущество

+1

Подумайте о замене атрибута продолжительности жизни с атрибутом, держащей дату истечения объекта. –

+0

Понятно, что я просто сравниваю его с ценностью. Это имеет смысл, спасибо. – Feta

ответ

2

сердцевины выборки данных запроса может фактически содержать простое арифметическое выражение. Так, чтобы найти все объекты, где «созданные + продолжительность жизни> = сейчас», следующих работ:

NSDate *now = [NSDate date]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"created + lifespan >= %@", now]; 
+0

Спасибо, это именно то, что я искал. – Feta

+0

@Feta: Добро пожаловать! –

2

Да, это возможно. например:

NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60 * 60 * 24)]; 
NSPredicate * predicate = [[NSPredicate alloc] initWithFormat:@"dateCreated > %@", yesterday]; 
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setPredicate:predicate]; 
NSError * error = nil; 
NSArray * results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

Вот больше информации о написании предикатов: http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Predicates/Articles/pCreating.html

+0

вышесказанное предполагает, что ваш объект Foo имеет атрибут dateCreated, который является NSDate. –

+1

У дня не всегда есть 24 часа. –

+0

Правда - но это демонстрирует, как сделать выборку. –

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