Неправильные элементы в разделе при извлечении из отношения «Ко многим»

#ios #core-data #nsfetchedresultscontroller

#iOS #core-data #nsfetchedresultscontroller

Вопрос:

У меня есть следующая взаимосвязь:

введите описание изображения здесь

Теперь я хочу получить все подменю для продукта, а затем все подменю для групп.

Это то, что у меня сейчас есть:

   (NSFetchRequest *)getSubMenusForProduct:(Product *)product {

    NSFetchRequest *fetchRequest =  [NSFetchRequest fetchRequestWithEntityName:[self entityName]];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"group.product.remoteID == %@ amp;amp; group.product == %@", product.remoteID, product];


    NSSortDescriptor *groupSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"group.name"
                                                                        ascending:YES];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortVal"
                                                                   ascending:YES];

    NSArray *sortDescriptors = @[groupSortDescriptor, sortDescriptor];
    [fetchRequest setSortDescriptors:sortDescriptors];


    return fetchRequest;
}
  

При этом группы извлекаются нормально, учитывая, что иногда подменю разделяется на неправильные группы (при обновлении данных). Как бы мне удалось получить все подменю для продукта, а затем разделить подменю на правильные группы?

Ответ №1:

Ваша строка формата предиката включает в себя self ( group ). Это должно быть просто product , а не group.product . То же самое относится и к вашему дескриптору сортировки.

Это предполагает, что загадка [self entityName] действительно @"SubMenuGroup" .
Если, однако, это так @"SubMenus" , ваш предикат избыточен. Было бы достаточно следующего:

 @"product = %@", product
  

Таким образом, проблема заключается в обновлении. Возможно, вам следует изучить свой контроллер выбранных результатов и код делегата контроллера выбранных результатов.

Комментарии:

1. Спасибо за ваш ответ. То, что я пытаюсь извлечь, — это подменю ([self EntityName] = subMenus), сгруппированное в этих группах. Должен ли я по-прежнему меняться с помощью предиката и sortDescriptors?

2. Ах, в этом случае ваш предикат почти в порядке (я отредактирую свой ответ), по крайней мере, он должен работать. Ваша проблема заключается в обновлении — это не зависит от запроса retch.