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]
,但沒有奏效。我也找不到任何文件表明這是可能的。不過,我確信,有人會嘗試過,並希望聽到他們的意見。
我不認爲你可以使用核心數據。你最好採用返回的集合並使用@max謂詞。看看https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html –
我可能會離開這裏,但如果你可以通過電子郵件獲得第一條記錄[0 ],最後的記錄不會是電子郵件[-1]。這似乎適用於幾種編程語言。 – StephenCollins