Сортировать fetchRequest по отношению ко многим (Базовые данные)? - PullRequest
0 голосов
/ 12 ноября 2011

Здесь вы можете увидеть связь между Предметом и Переводом.

enter image description here

Я хочу отсортировать элементы по Translation.name, используя определенный Translation.language Результатом должен быть упорядоченный массив с Предметами, который отсортирован на определенном языке, например Английский, немецкий и т. Д.

Thx

1 Ответ

1 голос
/ 12 ноября 2011

EDIT

Все, что вам нужно сделать, это получить все переводы элементов с помощью дескриптора сортировки

Я использую функцию, которую написал в прошлом:

 +(NSArray*)fetchForEntity:(NSString*)entityName withPredicate:(NSPredicate*)predicate withSortDiscriptor:(NSString*)sortdDscriptorName{

NSManagedObjectContext *moc=[[[UIApplication sharedApplication] delegate]managedObjectContext];
NSEntityDescription *entityDescription;

NSFetchRequest *request = [[NSFetchRequest alloc] init];
entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:moc];
[request setEntity:entityDescription];

[request setPredicate:predicate];

if (sortdDscriptorName) {
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                        initWithKey:sortdDscriptorName ascending:YES];
    [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}

NSError *error = nil;
NSArray * requestArray =[moc executeFetchRequest:request error:&error];
if (requestArray == nil)
{
    // Deal with error...
}
return requestArray;

   }

В вашем случае вы должны использовать это так:

 NSString *languageName = @"German"; //or what ever
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"language ==   %@",languageName];

 NSArray *array = [self fetchForEntity:@"Translation" withPredicate:predicate withSortDiscriptor:@"name"];

Теперь у вас есть список всех переводов на немецкий язык. Тогда вы можете получить все необходимые вещи:

  NSMutableArray *itemsArray = [NSMutableArray array];
 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   Translation *translation = (Translation*)obj;
   Item *item = translation.item;
  [itemsArray addObject:item];
 }];

Надеюсь, это поможет Шани

...