Похоже, у вас есть модель данных, похожая на эту:
Language{
code:string
translations<-->>Translation.language
}
Translation{
code:string
text:string
language<<-->Language.translations
}
Если у вас уже есть объект Language
, вам не нужно извлекать связанные Translation
объекты, которые у вас есть.ходить отношения.Для любого конкретного объекта Language
значение translations
вернет NSSet всех связанных переводов.Когда у вас есть набор, вы можете отсортировать его в массив для отображения в виде таблицы.
Обновление:
Из комментария:
Basically I would like to retrieve each Language object with only one translation out of the 32 it has
.
Базовые данные не работают так.Выборка возвращает экземпляры одной сущности, а затем вы проходите отношения этих сущностей, чтобы найти другие экземпляры связанных сущностей.Тем не менее, вы должны четко понимать, какой объект вы действительно хотите.В этом случае вам нужен объект Language
с определенными объектами Translations
или вам нужен объект Translations
с конкретным объектом Language
?
Если первый, первый шагчтобы получить нужный объект Language
с предикатом:
NSPredicate *p=[NSPredicate predicateWithFormat:@"code=%@",languageCode];
..., который даст вам английский Language
объект.Затем вы просто запрашиваете Language
для соответствующего Translation
объекта:
NSPredicate *p=[NSPredicate predicateWithFormat:@"code=%@",languageCode];
Translation *t=[[aLanguageObj.translations filteredSetUsingPredicate:p] anyObject];
Если вам приходится много делать, и у вас есть подклассы NSManagedObject для Language
и Translation
, вы можете деформироватьсяпредыдущий код в методе класса Language
, который обрабатывает это для вас:
-(Translation *) translationForCode:(NSString *) languageCode;
... и использует его следующим образом:
cell.textLabel.text=[[aLanguageObj translationForCode:languageCode].text];
Если вы хотитеTranslation
объект, связанный с конкретным Language
объектом, тогда вы будете запускать выборку для объекта Translation
с предикатом вроде:
NSPredicate *p=[NSPredicate predicateWithFormat:@"code==%@ AND langauge.text==%@",codeForTranslation,languageCode];