Фильтрация отношений с базовыми данными - PullRequest
1 голос
/ 09 декабря 2011

У меня есть граф объектов Core Data, настроенный так, что

Grandparent--(hasMany)-->>Parent--(hasMany)-->>Child

и каждая сущность имеет свойство 'modified'. Я хотел бы выполнить выборку, которая возвращает каждую сущность Grandparent с измененной датой после определенной даты. Он должен содержать все родительские объекты с измененной датой после этой точки, а также с дочерним объектом.

Я могу легко получить список бабушек и дедушек, используя

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];

Есть ли способ написать предикат, чтобы я мог фильтровать его отношения таким же образом? Спасибо!

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Вы должны быть в состоянии сделать что-то вроде этого:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@ OR ANY parents.modified > %@ OR ANY parents.children.modified > %@", 
                          lastSyncDate,
                          lastSyncDate,
                          lastSyncDate];

(где свойства для Parent и Child называются parents и children соответственно. Просто измените их длякак бы то ни было, вы их назвали.)

Я предлагаю вам прочитать это: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215891

ОБНОВЛЕНИЕ

Похоже, вы можетене делай этого.Я думаю, что вам действительно нужно использовать SUBQUERY.Этот вопрос похож на то, что вы хотите сделать: Какой лучший способ построить NSPredicate со многими глубокими отношениями?

0 голосов
/ 13 декабря 2011

В итоге я просто схватил весь свой объектный граф и отфильтровал отношения, используя

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];
NSArray *modifiedChildren = [[parent.children allObjects] filteredArrayUsingPredicate:predicate];

Это не очень эффективно, но, похоже, сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...