2

できれば簡単な質問ですが、List と ListItem という 2 つのエンティティがあり、それらの間に 1 対多の関係が設定されています。

私の問題は、listitem の属性によって分割された listitems を返す 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 対多の関係を使用できないと言っているためですが、ソート記述子が必要であるため、これを行う正しい方法がわかりません。どんな助けでも素晴らしいでしょう。

4

1 に答える 1

7

ListItem をフェッチしてセクション化する場合は、フェッチのエンティティとして「ListItem」を使用する必要があります。

この場合、「すべての ListItem オブジェクト Where List = 'xxxxx' を取得する」という方法があり、これを述語 (NSPredicate) と呼びます。

次のようにしてみてください (「list」は ListItem と List の関係の名前です):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];

また、Predicate Programming Guideも参照してください。

于 2009-11-17T15:29:35.870 に答える