2010-05-19 4 views
0

У меня есть объекты Customer, Event и Address в моей модели данных. Клиент и адрес имеют отношение «один ко многим» к событию.Как выполнить запрос/отфильтровать отношения ко многим в Core Data

я могу получить четкий список адресов для событий заказчика для делая это:

NSSet *addressSet = [customer valueForKeyPath:@"events.address"]; 

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

Я начинаю идти по пути создания NSFetchRequest, устанавливая его сущность, сортировать дескрипторы, предикат, а затем перебирать результаты, но это похоже на много кода. Не хватает ли я определенного способа фильтрации/сортировки на «событиях» отношения объекта Customer или создает наилучшее решение NSFetchRequest?

+0

Это помогает принять ответ (если вы считаете, что это правильно :), чтобы он мог увеличить вашу репутацию здесь для будущих вопросов. –

ответ

1

Это на самом деле довольно просто из-за аксессуаров KVO и KVC, которые доступны на NSSet и NSArray.

NSSet *eventsWithAddress = [[customer valueForKey:@"events"] filteredSetWithPredicate:[NSPredicate predicateWithFormat:@"address != nil"]]; 
id mostRecentEvent = [eventsWithAddress valueForKeyPath:@"@max.lastDate"]; 

Конечно имя свойства до вас, так как я не могу видеть модель данных, но это дает вам общее представление о том, где код должен идти. Вы можете видеть, какие операторы доступны в документации Apple.

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/ArrayOperators.html

ВНИМАНИЕ: Код, написанный в замечании окне StackOverflow, так что вы, скорее всего, нужно настроить его немного.

+0

Спасибо, что поставил меня на правильный путь. Я забыл про filterSetUsingPredicate. Все, что мне нужно было добавить в ваш код, было lastDate меньше текущей даты/времени. –

Смежные вопросы