Как извлечь конкретный управляемый объект B из отношения ко многим из A в B, основываясь на одном из атрибутов B? - PullRequest
0 голосов
/ 05 марта 2012

То есть, у меня есть сущность A, имеющая отношение ко-многим с сущностью B. В экземплярах B, помимо других атрибутов, есть creationDate. И у меня также уже есть управляемый объект для A в памяти.

Итак, я знаю, что могу получить доступ ко всем экземплярам B через средство доступа A. Но я хотел бы сделать что-то вроде:

"для всех B в A.relationshipName вернуть управляемый объект для B с самой последней B.creationData"

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Как насчет выполнения другого запроса на выборку:

Предполагается, что имя отношения на одной из сторон "один ко многим" равно a

// 1
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity  = [NSEntityDescription entityForName:@"B"
                                           inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity = entity;

// 2
fetchRequest.fetchLimit = 1;

// 3
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"self.a = %@", previouslyFetchedAObject];

// 4
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate"
                                                               ascending:NO];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
fetchRequest.sortDescriptors = sortDescriptors;

На простом английском языке

  1. Создайте новый запрос на выборку для B
  2. Установите предел выборки, чтобы вы возвращали только 1 объект
  3. Установите предикат, который возвращает только объекты, имеющие отношениек уже выбранному объекту A
  4. Установите порядок по убыванию даты, чтобы вы сначала получали самые новые даты
0 голосов
/ 06 марта 2012

С другой стороны, поскольку у вас уже есть управляемый объект A в памяти, вы можете выполнить фильтрацию в памяти для отношения A - >> B.

A *inMemoryA = ...

id byDate = [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES];
id sorters = [NSArray arrayWithObjects:byDate, nil];
NSArray *sortedBs = [inMemoryA allBs] sortedArrayUsingDescriptors:sorters];

B *mostRecentB = [sortedBs lastObject];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...