【问题标题】: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 结果。

【问题讨论】:

    标签: iphone core-data


    【解决方案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"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2013-09-27
      • 2011-10-05
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多