Подтвердить что ты не робот

Как создать NSFetchRequest, который фильтрует объекты Core Data на основе атрибутов AND?

У меня есть настройка модели Core Data так:

  • Блокбастер Сущность
    • To-Many для DVD.
  • DVD Сущность
    • title атрибут (строка)
    • Отношение To-One к родительскому объекту Блокбастер

Один блокбастер может иметь в себе несколько DVD (To-Many). Каждый DVD может быть только частью одного Blockbuster (To-One).

Существует несколько блоков Blockbuster, а некоторые могут содержать объекты DVD, которые имеют один и тот же заголовок как объекты DVD из других блоков Blockbuster. Например, Blockbuster A может иметь копию "Transformers 2", а также Blockbuster C и Blockbuster G. Пусть не притворяется, что у Blockbuster не более одной копии одного и того же названного фильма.

Я заинтересован в том, чтобы захватить DVD Transformers 2 из Blockbuster C. Я не хочу копий из Blockbuster A или G, потому что мой босс посещает там, и мне остается только сгореть этот кусок мусора в Blockbuster С.


Мой вопрос: как мне создать NSFetchRequest, который захватывает DVD с title "Трансформаторы 2", который является дочерним элементом Blockbuster "C" родительский объект?

Этот тип запроса будет захватывать все DVD-диски Transformer 2, но не тот, который специфичен для объекта Blockbuster C:

NSManagedObjectContext *moc = [self managedObjectContext];

NSString *aTitle = @"Transformers 2";
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", aTitle];
[request setEntity:[NSEntityDescription entityForName:@"DVD" inManagedObjectContext:moc]];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

// error handling code
[request release];

Есть ли способ передать, скажем, Идентификатор объекта связанного объекта внутри NSPredicate, фильтруя на основе этого?

4b9b3361

Ответ 1

Вы можете перемещать отношения в NSPredicate. Например, вы могли бы написать что-то вроде

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE \"Blockbuster C\"", @"Transformers 2"]

Теперь, если у вас нет свойства для сравнения, и вам нужно проверить фактические объекты, вы можете использовать что-то вроде

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters]

Полный синтаксис документирован здесь. Но setOfBlockbusters может быть набором, массивом или словарем (если используется словарь, значения, а не ключи).