iOS排序CoreData结果 - 一种父子关系

时间:2012-09-06 09:01:48

标签: ios sorting core-data uipickerview

我在这里遇到一个简单的问题:

我有coredata本地存储的对象(通过休息)。 在coredata权限内,我有以下属性:

  • catID(int16)
  • parentID(int16)
  • title(String)

这是一个简单的类别列表,用户可以在应用程序中的pickerView中选择。字段catID是标识每个类别的唯一ID。 parentID包含主类别的catID。如果parentID = 0,则该类别是主类别(根级别)。

我需要在pickerview中加载类别列表以供用户选择。 PickerView中的List应显示为:

MainCategory 1
MainCategory 2
    SubCategory 2.1
    SubCategory 2.2
MainCategory 3
MainCategory 4
    SubCategory 4.1

如何将所有类别作为对象加载到一个让我们说NSArray中,并按类别正确排序?级别2上的类别(其中parentID!= 0)必须出现在NSArray中的主类别之后才能在pickerView中显示正确。 Techincally类别和子类别是相同类型的对象。只有属性parentID才能告知对象是类别还是子类别。

2 个答案:

答案 0 :(得分:2)

您需要查看Coredata的内容 - 对象图管理器 - 而不是数据库。

我个人的选择是创建指向实体本身的关系(及其相应的反向)。

所以你有一个Category实体,childCategories一对多关系和parentCategory一对一关系作为其反转。

通过这种方式,您可以正常创建类别并进行适当的连接,例如

Category *childCat = ...
Category *parentCat = ...
childCat.parentCategory = parentCat;

然后提取只是决定你想要怎么做的问题。您可以获取所有没有父项的Category个实体(即它们是主类别),然后针对每个主类别,浏览该关系以找到childCategories

答案 1 :(得分:1)

你可以扩展一下你的问题吗?

我不知道这是不是你想要的,但要对NSSet进行排序你可以这样做

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"theKeyToOrder" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];   

NSArray * sortedArray = [TheCoreDataResultNSSet sortedArrayUsingDescriptors:sortDescriptors];

编辑:

您可以创建NSMutableArray并添加元素。

类似的东西:

NSMutableArray * sortedArray = [[NSMutableArray alloc]init];
 for (parentCategory in parentCategories) {
    [sortedArray addObject:parentCategory];
        for (child in parentCategory){
            [sortedArray addObject:child];
        }
}

您只需要一个仅包含parentCategories的CoreData结果,然后使用子/父关系添加子项。

EDIT2:抱歉,我没有看到您没有父/子关系,我认为您应该更改关系的parentID。无论如何,你可以做我说的,只需带父母,然后在for中,取parentID为当前类别的类别