最近的搜索结果加入核心数据
Posted
技术标签:
【中文标题】最近的搜索结果加入核心数据【英文标题】:Most recent search results join in Core Data 【发布时间】:2009-05-16 21:11:48 【问题描述】:这是对之前saving recent searches 与 Core Data 的帖子的后续问题。
为了对搜索结果进行分组,我有一个条目实体和历史实体。 Entry.history 是与 History 的关系。 History.entries 是与 Entry 的一对多关系(Entry.history 的逆)。历史有一个日期属性 createdAt。我试图弄清楚如何在 NSFetchedResultsController 中获取属于最新 History 实体的所有 Entry 实体。
我可以像这样获取最新的历史实体
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"History" inManagedObjectContext:context];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[request setFetchLimit:1];
NSArray *results = [context executeFetchRequest:request error:&error];
History *history = (History *)[results objectAtIndex:0];
然后是 NSFetchedResultsController 中的 Entry 实体,像这样
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"history == %@", history];
request = [[NSFetchRequest alloc] init];
entity = [NSEntityDescription entityForName:@"Entry" inManagedObjectContext:context];
[request setEntity:entity];
[request setPredicate:predicate];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Root"];
但我想在一个请求中执行此操作。请注意,我只关心 fetchedResultsController 存储 Entry 结果。
【问题讨论】:
【参考方案1】:您应该能够拥有一个遵循关系的排序描述符:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entry"
inManagedObjectContext:context];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"history.createdAt"
ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor
count:1];
[request setEntity:entity];
[request setSortDescriptors:sortDescriptors];
[request setFetchLimit:1];
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:@"Root"];
【讨论】:
以上是关于最近的搜索结果加入核心数据的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch系统学习-elasticsearch简单介绍和核心概念