我在这里遇到一个简单的问题:
我有coredata本地存储的对象(通过休息)。 在coredata权限内,我有以下属性:
这是一个简单的类别列表,用户可以在应用程序中的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
才能告知对象是类别还是子类别。
答案 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为当前类别的类别