ios NSFetchRequest, упорядочить дочерние объекты - PullRequest
4 голосов
/ 17 апреля 2011

Привет хотел бы знать, как указать FetchRequest, где я могу упорядочить объекты в отношениях.

   |  Parent         |        | Child        |
   |     - name      |------->|   - name     |
   |     - position  |        |   - position |

Например, если у меня есть родительская таблица, которая содержит атрибут позиции и имеет один дляМногие отношения с дочерней таблицей, которая также имеет атрибут позиции.Как вернуть родительские объекты (упорядоченные по позиции), которые содержат дочерние объекты, упорядоченные по позиции.

например,

parent 1
   child 1
   child 2
   child 3

parent 2
   child 15
   child 16

parent 3
   child 22
   child 23
   child 24

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

    NSFetchRequest* fetchReqest = [[NSFetchRequest alloc] init];

    NSEntityDescription* entity = [NSEntityDescription entityForName:@"parent"  inManagedObjectContext:managedObjectContext];
    [fetchReqest setEntity:entity];  

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                        initWithKey:@"position" ascending:YES];
    [fetchReqest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
    [sortDescriptor release];

    NSArray* parentsThatContainChildren =  [managedObjectContext executeFetchRequest:fetchReqest error:nil];

Cheers

1 Ответ

4 голосов
/ 17 апреля 2011

Есть 2 стратегии для этого:

  1. Выполните отдельный запрос на выборку для детей с помощью NSSortDescriptor. Pro: вы держите это в FetchController. Con: несколько запросов на выборку могут замедлить работу
  2. Сортировка возвращенных детей в NSArray * parentThatContainChildren.

Для # 2 вы можете проверить это :

NSSortDescriptor *positionSort = [NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES];

NSArray *children = [[parent.children allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:positionSort]];
...