2013-01-24 4 views
0

В моем приложении у меня есть два объекта: Сделка и адрес. Они связаны через отношения «многие ко многим». Объект Address имеет много свойств - широта и долгота являются двумя из них. Можно ли получить все объекты Сделки вместе со своими связанными объектами Адреса, чтобы получить только определенные свойства объектов Address (широта и долгота)?Как получить определенные свойства связанного объекта?

+0

Вы имеете в виду, когда вы получаете их из CoreData? – perrohunter

+0

Да, это именно то, что я имею в виду. –

+0

Если вы выберете все сделки внутри CoreData, вы получите адреса, обратившись к NSSet, которые будут связаны с отношением Address Many to Many. Таким образом, вы можете пройти через NSSet и получить широту и долготу из системы. Таким образом, вы можете просто создать NSFetchResult с необходимым типом сущности типа, тогда вы можете выполнить его внутри своего управляемого объекта. – darren102

ответ

1

Если я правильно понимаю, вы не хотите фильтровать результаты своей выборки. Вы хотите все сделок, а затем просто подмножество атрибутов связанных адресов.

Непонятно из вашего вопроса, как вы хотите использовать эти результаты. Связать ли атрибуты объекта «Адреса» с соответствующими объектами «Сделки»?

Если нет, вы можете просто получить все объекты Address и просто получить нужные свойства. Поскольку Core Data поможет вам управлять памятью, только извлекая нужные атрибуты, вы можете просто извлечь все объекты. Массив атрибута для всех экземпляров может быть легко формируется следующим образом:

[allAddresses valueForKeyPath:@"attributeName"]; 

Вы также можете непосредственно установить выборки resultType собственности запрос на NSDictionaryResultType и указать свойства в propertiesToFetch.

Другой сценарий заключается в том, что вы не хотите, чтобы отношения между сделками и адресами были нарушены. В этом случае просто заберите все сделки (Core Data будет использовать сбой для уменьшения объема памяти). Затем вы можете перебирать результаты и легко получать каждый атрибут.

for (Deal *deal in allDeals) { 
    NSSet *allLongitudesInAddresses = 
      [deal.addresses valueForKeyPath:@"longitude"]; 
    // do something with the attributes 
} 
+0

Спасибо за отличный ответ Мунди. Второй сценарий, который вы описываете, - это то, чего я хочу достичь. Если я использую предоставленный вами код, будут ли основные данные извлекать все атрибуты адресных объектов при попытке доступа к долготе? –

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