我需要从两个不同的实体执行提取,合并它们,然后根据两个实体都具有的字段对它们进行排序:'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中。感谢。
答案 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”对象。如果有很多,这不是最佳选择 两者都不常见的属性。)