对于 EntityA 与 EntityB 具有多对一关系的核心数据模型,我想创建一个 EntityA 对象列表,按与之相关的 EntityB 的名称排序。通常要做到这一点,我会像这样设置获取请求:
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
然后我会设置我的请求值:(在这种情况下,它是按物种名称排序的植物列表。有些植物没有设置物种。)
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Plant" inManagedObjectContext:self.managedObjectContext];
NSSortDescriptor *sortDescriptorOne = [[NSSortDescriptor alloc] initWithKey:@"species.name" ascending:YES];
NSString *sectionKeyPath = @"species.name";
然后我用通常的东西完成它:
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
NSArray *sortDescriptors = @[sortDescriptorOne];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:sectionKeyPath
cacheName:@"plantsCache"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[NSFetchedResultsController deleteCacheWithName:@"plantsCache"];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
但是我得到的结果对我不起作用,因为这种关系是可选的。所以有些EntityA与EntityB有关系,有些则没有。当 EntityA 的关系的值为 nil 时,结果控制器似乎不知道该怎么做。
有什么建议我可以做些什么来继续使用关系的值制作部分但允许某些对象为零?