Search code examples
iossortingcore-datauipickerview

iOS sort CoreData Result - kind of parent-child relationship


I'm a bit stuck here with a simple question:

I have objects (coming via rest) stored locally with coredata. Within coredata entitie i have the following attributes:

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

This is to have a simple list of categories the user can choose from in a pickerView later in the app. The field catID is a unique ID identifying each category. The parentID holds the catID of the master category. If the parentID = 0, the category is a master category (root-level).

I need to load the list of categories in a pickerview to let the user choose from. The List within the PickerView should displayed like:

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

How can i load all categories as objects in a let's say NSArray and have the categories sorted the correct way? Categories on level 2 (where parentID != 0) have to appear right after their master category in NSArray to appear correct in the pickerView. Techincally Categories and SubCategories are objects of the same type. Only the attribute parentID tells if the object is a category or a subcategory.


Solution

  • Can you expand a bit your question?

    I don't know if it's what you want, but to sort a NSSet you can do it this way

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

    EDIT:

    You can create a NSMutableArray and add the elements.

    something like this:

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

    You just need a CoreData result with just the parentCategories, and then use the child/parent relationship to add the children.

    EDIT2: Sorry, I didn't see you don't have a parent/child relationship, I think you should change the parentID for a relationship. Anyways, you can do what I said, just take the parents, and then in the for, take the categories where parentID is the current Category