EntityA が EntityB と多対 1 の関係を持つコア データ モデルの場合、関連する EntityB の名前で並べ替えられた EntityA オブジェクトのリストを作成したいと考えています。通常、これを行うには、次のようにフェッチ リクエストを設定します。
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 の場合に何をすべきかを認識していないようです。
リレーションシップの値を使用してセクションを作成し続け、一部のオブジェクトに nil を許可するためにできることはありますか?