#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.