iPhone コアデータのフェッチ リクエスト、関係とセクションに関する基本
-
20-09-2019 - |
質問
単純な質問だと思います。List と ListItem という 2 つのエンティティがあり、それらの間には 1 対多の関係が設定されています。すべて問題ありません。
私の問題は、listitem の属性によって分割された listitem を返す fetchrequest を実行しようとしているときに発生します。「Where List = 'xxxxx'」と言う方法がないため、listItem オブジェクトに対して fetchrequest を直接実行することはできません。そのため、次のようなものになります。
- (NSFetchedResultsController *)getListItems {
// Init a fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"listItem.productName" ascending:YES selector:nil];
NSArray *descriptors = [NSArray arrayWithObject:sortDescriptor];
[fetchRequest setSortDescriptors:descriptors];
// Init the fetched results controller
NSError *error;
self.globalFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"listItem.productName" cacheName:@"listItems"];
self.globalFetchedResultsController.delegate = self;
if (![[self globalFetchedResultsController] performFetch:&error]) NSLog(@"Error: %@", [error localizedDescription]);
[fetchRequest release];
[sortDescriptor release];
return self.globalFetchedResultsController;
}
さて、このエラーは、並べ替え記述子で 1 対多の関係を使用できないことを示しているためです。ただし、並べ替え記述子が必要であるため、これを行う正しい方法がわかりません。助けていただければ幸いです。
解決
ListItem をフェッチしてセクション化したい場合は、フェッチ用のエンティティとして「ListItem」を使用する必要があります。
この場合、「List = 'xxxxx' の ListItem オブジェクトをすべて取得する」という方法があり、これを述語 (NSPredicate) と呼びます。
次のようなことを試してください (「list」は List との ListItem 関係の名前です)。
NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];
また、次も参照してください。 述語プログラミングガイド.
所属していません StackOverflow