1

我需要从两个不同的实体中执行提取,合并它们,然后根据两个实体都具有的字段对它们进行排序:'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 中。谢谢。

4

1 回答 1

2

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

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]];

或者,您可以定义一个实体“Entity”,将其设为“Entity1”和“Entity2”的父实体,并在父实体 中定义所有公共属性(例如“lastModifiedDate”)。然后您可以获取和排序“实体”对象。

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

于 2013-08-01T13:32:01.110 回答