2014-02-24 44 views
1

使用下面的代碼,我從Core Data中獲取一組電子郵件。我將一個emailId數組作爲謂詞傳遞給fetch,並返回每個emailIds的所有電子郵件。核心數據 - 獲取對象數組的最後一個對象?

但是,我只需要謂詞中每個emailIds的最後一個對象(或最後一封電子郵件)。目前,我使用此提取的輸出並使用單獨的排序來過濾我想要的對象。不過,我希望在這個抓取中進行過濾。有沒有辦法做到這一點?

- (NSFetchedResultsController *)getLatestEmail:(NSArray *)emailId 
{ 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"email_id IN %@", emailId]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Emails" 
               inManagedObjectContext:self.context]; 
    [fetchRequest setEntity:entity]; 
    [fetchRequest setPredicate:predicate]; 
    [fetchRequest setFetchBatchSize:20]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"last_update_timestamp" ascending:NO]; 
    NSArray *sortDescriptors = @[sortDescriptor]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] 
                  initWithFetchRequest:fetchRequest 
                  managedObjectContext:self.context 
                  sectionNameKeyPath:nil 
                  cacheName:@"Master"]; 
    aFetchedResultsController.delegate = self; 
    self.emailFetchedResultsController = aFetchedResultsController; 

    NSError *error = nil; 
    if (![self.emailFetchedResultsController performFetch:&error]) 
    { 
     NSLog(@"getLatestEmail failed %@, %@", error, [error userInfo]); 
    } 

     NSArray *emails = [[self.context executeFetchRequest:fetchRequest error:&error] mutableCopy]; 


    return _emailFetchedResultsController; 
} 

我嘗試添加.lastobject[[self.context executeFetchRequest:fetchRequest error:&error] mutableCopy],但沒有奏效。我也找不到任何文件表明這是可能的。不過,我確信,有人會嘗試過,並希望聽到他們的意見。

+0

我不認爲你可以使用核心數據。你最好採用返回的集合並使用@max謂詞。看看https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html –

+0

我可能會離開這裏,但如果你可以通過電子郵件獲得第一條記錄[0 ],最後的記錄不會是電子郵件[-1]。這似乎適用於幾種編程語言。 – StephenCollins

回答

0

反轉您的排序描述符,然後將批量大小設置爲1,並將偏移量設置爲零。