iOS:两个实体——获取、合并和排序

Posted

技术标签:

【中文标题】iOS:两个实体——获取、合并和排序【英文标题】:iOS: Two Entities - Fetch, Merge, and Sort 【发布时间】:2013-08-01 13:08:40 【问题描述】:

我需要从两个不同的实体中执行提取,合并它们,然后根据两个实体都具有的字段对它们进行排序:'lastModifiedDate'。 lastModifiedDate 是 NSDate

NSFetchRequest *fetchRequest1 = [[NSFetchRequest alloc] init];
NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] init];

NSEntityDescription *entity1 = [NSEntityDescription entityForName:@"Entity1" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest1 setEntity:entity1];

NSEntityDescription *entity2 = [NSEntityDescription entityForName:@"Entity2" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest2 setEntity:entity2];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastModeifiedDate" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

[fetchRequest1 setSortDescriptors:sortDescriptors];
[fetchRequest2 setSortDescriptors:sortDescriptors];

[self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) 
    [self.refreshControl endRefreshing];
    self.objects = results; //objects is an array @property
    [self.tableView reloadData];

 onFailure:^(NSError *error) 

    [self.refreshControl endRefreshing];
    NSLog(@"An error %@, %@", error, [error userInfo]);

我被困在这里了。我需要合并 fetchRequest1 和 fetchRequest2,并让对象按降序显示在 tableViewController 中。谢谢。

【问题讨论】:

【参考方案1】:

你不能合并两个获取请求,但你可以合并和排序获取的数组:

NSArray *results1 = ...; // from first fetch request;
NSArray *results2 = ...; // from second fetch request;
NSMutableArray *merged = [[NSMutableArray alloc] init];
[merged addObjectsFromArray:results1];
[merged addObjectsFromArray:results2];
[merged sortUsingDescriptors:@[sortDescriptor]];

或者,您可以定义一个实体“实体”,使其成为父实体 用于“Entity1”和“Entity2”,并定义所有通用属性(例如 “lastModifiedDate”)在父实体中。然后你可以获取和排序“实体”对象。

(实体继承的一个可能缺点是 Core Data 使用单个表来存储所有 “Entity”、“Entity1”和“Entity2”对象。如果有很多,这不是最佳的 两者都不共有的属性。)

【讨论】:

谢谢!这真的是我需要的。在单个 UITableView 中显示不同的子实体是我的目标 :)

以上是关于iOS:两个实体——获取、合并和排序的主要内容,如果未能解决你的问题,请参考以下文章

在编写合并两个排序链表的代码时获取地址错误的运行时负载

从两个排序数组中获取前 K 项而不合并它们

如何在没有实体的学说查询中合并连接表

根据关系属性对获取请求进行排序

延迟获取和维护排序的 NSArrayController

CoreData 排序实体 - 性能