2013-04-09 3 views
0

У меня есть объекты в моей базе данных CoreData, у которых есть свойство «date» типа NSDate. Как я могу получить объекты с 10 ближайшими датами?Извлечь объекты из основных данных с 10 ближайшими датами

Это то, что я до сих пор:

NSFetchRequest *fetchRequest = [NSFetchRequest new]; 
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([MyManagedObject class]) inManagedObjectContext:self.database.managedObjectContext]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
NSArray *result = [self.database.managedObjectContext executeFetchRequest: fetchRequest error: nil]; 

Я считаю, что это даст мне все мои управляемые объекты обратно в отсортированном порядке, но мне действительно нужно только 10 наиболее актуальные из них. Как я могу это сделать? И будет ли быстрее сортировать их, используя NSFetchRequest, а не собирать их все, а затем сортировать их программно?

+0

добавить fetchRequest.fetchLimit = 10. Вы получите максимум 10 объектов для этого запроса. – sanjaymathad

ответ

0
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]; 
... 
NSArray* tenSoonestElements = [result subarrayWithRange:NSMakeRange(0, 10)]; 
+0

Является ли это лучше, чем ограничение числа, которое я получаю, как предлагалось выше Симусом? –

+0

Профиль и тест. Я не уверен, как это было бы очень по-другому, так как запрос все равно должен вытащить все записи, чтобы отсортировать их правильно. Но профилирование подтвердит, верно это или нет. –

6

Сортировать записи в порядке убывания и нам fetchLimit только получить самые последние результаты:

NSFetchRequest *fetchRequest = [NSFetchRequest new]; 
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([MyManagedObject class]) 
            inManagedObjectContext:self.database.managedObjectContext]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" 
                   ascending:NO]; 
[fetchRequest setSortDescriptors:@[sortDescriptor]]; 
[fetchRequest setFetchLimit:10]; 
NSArray *result = [self.database.managedObjectContext executeFetchRequest:fetchRequest 
                    error:nil]; 
Смежные вопросы