2013-04-09 70 views
0

我在我的CoreData數據庫中具有類型的NSDate的「日期」的屬性的對象。我怎樣才能用最快的日期獲取對象?獲取從核心數據對象與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 2014-01-17 11:18:03

回答

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

這是否比限制我像上面提到的Seamus獲取的數量好? – 2013-04-09 22:09:27

+0

簡介和測試。我不確定它會有多大的不同,因爲請求仍然需要將所有記錄正確排序。但分析將確認這是否屬實。 – 2013-04-09 22:10:33

6

排序在decending爲了記錄和美國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];