-1

我有点困在这里有一个简单的问题:

我有对象(通过休息来)与 coredata 一起存储在本地。在 coredata 实体中,我具有以下属性:

  • 猫ID(int16)
  • 父 ID (int16)
  • 标题(字符串)

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

我需要在选择器视图中加载类别列表以供用户选择。PickerView 中的列表应显示如下:

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

我如何将所有类别加载为比方说 NSArray 中的对象并以正确的方式对类别进行排序?级别 2 上的类别(其中 parentID != 0)必须出现在 NSArray 中的主类别之后,才能在 pickerView 中正确显示。从技术上讲,类别和子类别是相同类型的对象。只有属性parentID告诉对象是类别还是子类别。

4

2 回答 2

2

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

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

所以你有一个Category实体,一个childCategories一对多的关系和一个parentCategory一对一的关系作为它的逆。

这样您就可以正常创建类别并建立适当的连接,即

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

然后获取只是决定你想怎么做的问题。您可以获取所有Category没有父母的实体(即它们是主类别),然后对于每个主类别,遍历关系以找到childCategories.

于 2012-09-06T09:46:25.403 回答
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为当前Category的category

于 2012-09-06T09:25:36.167 回答