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:两个实体——获取、合并和排序的主要内容,如果未能解决你的问题,请参考以下文章