iOS:两个实体 - 获取,合并和排序

时间:2013-08-01 13:08:40

标签: sorting core-data nsmanagedobject nsfetchrequest

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

答案 0 :(得分: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]];

或者,您可以定义实体“实体”,使其成为父实体 为“Entity1”和“Entity2”,并定义所有常见属性(如 父实体中的“lastModifiedDate”)。然后,您可以获取并对“实体”对象进行排序。

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

相关问题