iPhone コアデータのフェッチ リクエスト、関係とセクションに関する基本

StackOverflow https://stackoverflow.com/questions/1749316

質問

単純な質問だと思います。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];

また、次も参照してください。 述語プログラミングガイド.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top