ios NSFetchRequest,命令子对象

时间:2011-04-17 13:09:18

标签: ios core-data nsfetchrequest nssortdescriptor

您想知道如何指定FetchRequest,我可以在关系中订购对象。

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

例如,如果我有一个包含position属性的父表,并且与具有position属性的子表具有一对多的关系。如何返回包含按位置排序的子对象的父对象(按位置排序)。

e.g

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];

干杯

1 个答案:

答案 0 :(得分:4)

有两种策略:

  1. 使用NSSortDescriptor对子项执行单独的获取请求。亲:你把它保存在FetchController中。 Con:多次获取请求会降低您的速度
  2. 在NSArray * parentsThatContainChildren。
  3. 中对返回的子项进行排序

    对于#2,您可以check this out

    NSSortDescriptor *positionSort = [NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES];
    
    NSArray *children = [[parent.children allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:positionSort]];