对作为另一个NSManagedObject的属性的NSSet进行排序的最佳方法是什么

时间:2014-05-25 05:42:58

标签: ios core-data

我有account模型和client模型。 account有很多clients。当我获取account对象时,我希望所有client个对象按给定NSSet中的名称排序。 解决此问题的最佳方式是什么?

到目前为止,我尝试了两件事:

  1. 将列表排序为单独的列表。这有效,但似乎并不是最佳的
  2. 谷歌搜索"如何对获取的属性进行排序"。我得到了一些结果,但没有任何简单明了。

2 个答案:

答案 0 :(得分:2)

NSSet(以及NSSet属性支持中使用的NSManagedObject的基础子类),以及'设置'一般来说都是无序的。

排序到数组可能就是你想要的。这可以使用NSArray sortedArrayUsingDescriptors:NSSet' allObjects来完成。

或者,可以将NSManagedObjectMutableSetaddObject/unionSet / etc:方法转换为维护已排序数组的包装器,您可以通过类别方法访问该类,但可能有其他含义 - 到目前为止,最简单的解决方案是排序成数组。

答案 1 :(得分:0)

以下是一个例子:

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"indexOrder" ascending:YES];
    collectionViewData = [[goalManager rootGoalsForUser] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];

在这种情况下,rootGoalsForUser的创建方式如下:

- (NSArray *) rootGoalsForUser
{
    NSSet *goal = [uManager goalWithParent:nil];    // retrieves root level goals
    NSArray *rootGoalArray = [goal allObjects];
    if ([rootGoalArray count] <= 0)
        return nil;
    else
        return rootGoalArray;
}

所以,它是一个集合,我们将它放在一个包含allObjects的数组中,然后在该方法返回NSSortDescriptor后进行排序。