Search code examples
iosobjective-cnsarraynsorderedset

How to add a value to an NSOrderedSet


I'm using a NSOrderedSet to store the data in a Json server and do it that way because data arrives duplicated and I have to filter them to keep only one value. Now I need to add a value at the beginning of NSOrderedSet. I know how to add value to an NSArray, but not how to pass data from NSOrderedSet to the NSArray.

This is an example of what I get from the server:

{(
    AMAZONAS,
    AMAZONAS,
    ANTIOQUIA,
    ANTIOQUIA,
    ARAUCA,
    "AREA EN LITIGIO",
    "AREA EN LITIGIO",
    ATLANTICO,
)}

with NSOrderedSet sorts the data to avoid repeated as follows:

    deptoArray=[NSOrderedSet orderedSetWithArray:[_data valueForKey:@"Nombre"]];

{(
    AMAZONAS,
    ANTIOQUIA,
    ARAUCA,
    "AREA EN LITIGIO",
    ATLANTICO,
)}

but now I need to add a data at the beginning so that it is as follows:

{(
    Seleccione,
    AMAZONAS,
    ANTIOQUIA,
    ARAUCA,
    "AREA EN LITIGIO",
    ATLANTICO,
)}

Solution

  • The standard foundation collection classes are all immutable. So you need to create a mutable version of the collection. Either create it as a mutable ordered set

    NSMutableOrderedSet *deptoArray = nil;
    // ...
    deptoArray= [NSMutableOrderedSet 
                     orderedSetWithArray:[_data valueForKey:@"Nombre"]];
    [deptoArray insertObject:@"Seleccione" atIndex:0];
    

    or create a mutable copy of the ordered set (skip autorelease if you use ARC)

    NSMutableOrderedSet *mutableDeptoArray = 
                [[deptoArray mutableCopy] autorelease];
    [mutableDeptoArray insertObject:@"Seleccione" atIndex:0];